Seite 1 von 1

Verständnisfrage zu Klassen

Verfasst: Donnerstag 22. Dezember 2016, 13:35
von superthorsten1
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

Re: Verständnisfrage zu Klassen

Verfasst: Donnerstag 22. Dezember 2016, 13:45
von Sirius3
@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.

Re: Verständnisfrage zu Klassen

Verfasst: Donnerstag 22. Dezember 2016, 13:54
von superthorsten1
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.