Ich brauche einige Klassenattribute, die von diesem Lambda bevölkert werden, und die Selbstreferenzierung der Klasse ist in dieser Phase offensichtlich nicht möglich.
Aber von Ihrem bestimmten Code, werden alle LAMBDA tun, wenn es genannt wird, ist selbst MyClass.ClassMethod()
nennen, was die Methode bedeutet, ist das Bestücken tun ClassMethod
(dies ist natürlich unter der Annahme, dass der Körper von ClassMethod
nicht wirklich ist diese Sohle pass
hast du gezeigt, denn wenn es dann alles tut, ist das eine Übung in Vergeblichkeit).Es sei denn, es gibt einen Aspekt Ihres Codes, der Sie davon abhält, auf die Klasse zu verweisen, bevor Sie sie für irgendetwas verwenden. Warum können Sie nicht nach der Klassendefinition MyClass.ClassMethod()
aufrufen?
Und wenn Sie versuchen, Attribute der Klasse innerhalb der Definition (dh Aufruf von LAMBDA innerhalb der Definition von MyClass, außerhalb von irgendwelchen Methoden/Funktionen/was auch immer) zu ändern, möchten Sie vielleicht einen Blick auf die Abschnitt der Dokumentation über metaclasses.
Wenn Sie einer Klasse Attribute zuweisen möchten, müssen Sie dies nicht einmal im Rumpf der Klasse selbst tun.
>>> class cls(object): # or just "class cls:"
... pass
...
>>> cls.value = 10
>>> cls.name = 'class'
>>> cls.value
10
>>> cls.name
'class'
>>> dir(cls)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__',
'__getattribute__', '__hash__', '__init__', '__module__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__',
'__str__', '__subclasshook__', '__weakref__', 'name', 'value']
FYI, Dies funktioniert auf Python 3, aber nicht auf Python 2. – kennytm
@KennyTM, Es funktioniert auf Python 3 durch Zufall. Python 3 wurde die gebundene Methode los und gibt nur die Funktion selbst zurück. Obwohl dies eine gute Design-Entscheidung ist, ist es konzeptuell bestenfalls, es zu benutzen, um falsche statische Methoden zu erstellen. –