Verständnisfrage zu Klassen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
superthorsten1
User
Beiträge: 6
Registriert: Mittwoch 16. November 2016, 20:08

Liebe Leute,

das folgende Problem ist vermutlich wegen eines grundsätzlichen Verständnisproblems entstanden, deshalb könnte mir eine Erklärung hierzu durchaus weiter helfen. Ich habe zwei Klassen, Klasse_Eins und Klasse_Zwei. Aus Klasse_Eins wird ein Objekt „eins“ erzeugt und aus diesem heraus wird aus Klasse_Zwei ein Objekt „zwei“ erzeugt. Hier ist der Code:

Code: Alles auswählen

#!/usr/bin/env python3
# coding: utf8

class Klasse_Eins():

	def __init__(self,master=None):
		self.zwei = Klasse_Zwei()
	def start_klasse_zwei(self):		
		print("Ausgabe aus Klasse Eins")
		print(self.zwei.ausgabe)

class Klasse_Zwei():
	def ausgabe():
		a = "Ausgabe aus Klasse 2"		
		return(a)

def main():
	eins = Klasse_Eins()
	eins.start_klasse_zwei()
if __name__ == "__main__":
	main()
Es soll aus Klasse eins mit print "Ausgabe aus Klasse 1" und "Ausgabe aus Klasse 2" durch aufrufen der Klasseninstanz zu Klasse_Zwei ausgegeben werden. Statt "Ausgabe aus Klasse 2" wird jedoch Folgendes ausgegeben:
<bound method Klasse_Zwei.ausgabe of <__main__.Klasse_Zwei object at 0xb72251ec>>
Könnte mir dies jemand erklären ?

Viele Grüße,
Thorsten
Zuletzt geändert von Anonymous am Donnerstag 22. Dezember 2016, 13:46, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17745
Registriert: Sonntag 21. Oktober 2012, 17:20

@superthorsten1: das hat nichts mit Klassen direkt zu tun, sondern nur mit der Tatsache, dass in Python Funktionen/Methoden auch Objekte sind. Um sie aufzurufen, muß man Klammern dahinter schreiben. `return` ist im Übrigen keine Funktion, da haben also Klammern nichts zu suchen.
superthorsten1
User
Beiträge: 6
Registriert: Mittwoch 16. November 2016, 20:08

Danke für den Hinweis. Ich habe den Code aktualisiert:

Code: Alles auswählen

#!/usr/bin/env python3
# coding: utf8

class Klasse_Eins():

	def __init__(self,master=None):
		self.zwei = Klasse_Zwei()
	def start_klasse_zwei(self):		
		print("Ausgabe aus Klasse Eins")
		print(self.zwei.ausgabe())

class Klasse_Zwei():
	def ausgabe(self):
		a = "Ausgabe aus Klasse 2"		
		return a

def main():
	eins = Klasse_Eins()
	eins.start_klasse_zwei()
if __name__ == "__main__":
	main()
Es fehlte weiterhin das self in den Klammern bei def ausgabe(). Nun funktioniert es.
Zuletzt geändert von Anonymous am Donnerstag 22. Dezember 2016, 14:20, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Antworten