Methode einer Klasse über dict-value aufrufen?

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
Benutzeravatar
paitn
User
Beiträge: 16
Registriert: Montag 4. Juni 2018, 09:32

Hallo,

bei einer Funktion - also ohne Klasse ohne 'self' - klappt das aber innerhalb einer Klasse bekomme in einen NameError: name 'self' is not defined

Code: Alles auswählen

   1   │ class Klasse:
   2   │     def funktion(self):
   3   │         print("klappt")
   4   │ 
   5   │     mydict={5:self.funktion}
   6   │     mydict.get(5)()
Wie und wo bekomme ich ein 'self' reingemogelt oder ist dies überhaupt nicht möglich?

Grüße
Michael
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Code: Alles auswählen

class Klasse:
	def funktion(self):
		print("klappt")
		return None
	
	def main(self):
		mydict={5:self.funktion}
		mydict.get(5)
Du hast 'mydict' als Attribut deiner Klasse definiert, da es keiner Funktion der Klasse zugehörig war.
Außerdem macht dein Dictionary kein Sinn: 5 ist was?

Mal ein Beispiel:

Code: Alles auswählen

{'anzahl':5}
Hier sieht du, dass wir die Anzahl von etwas auf 5 setzen.
Andersrum geht es aber nicht...

Code: Alles auswählen

{5:'anzahl'}
Ich meine, klar, würde wahrscheinlich schon funktionieren, aber was ist, wenn mehrere Variablen des Dict. 5 hätten - dann geht das nicht und unübersichtlich ist es im Allgemeinen auch extrem.
Sirius3
User
Beiträge: 17844
Registriert: Sonntag 21. Oktober 2012, 17:20

@paitn: für ein `self` brauchst Du eine Instanz der Klasse. Während der Klassendefinition existiert aber noch keine Instanz. Kannst Du etwas weiter ausholen, welches Problem Du eigentlich lösen willst?



@xXSkyWalkerXx1: verstehe das mit der 5 auch nicht, aber wenns nunmal der Key ist.
Benutzeravatar
paitn
User
Beiträge: 16
Registriert: Montag 4. Juni 2018, 09:32

Verstehe, danke!
Ich möchte eine Uhr programmieren, bin aber inzwischen auf eine andere Idee gekommen und werde das einfacher lösen.
Trotzdem interessierte es mich.
Antworten