Necesito algunos atributos de clase llenados por esa lambda y la auto-referencia de la clase obviamente no es posible en esa etapa.
Pero a partir de su código dado, todo LAMBDA hará cuando se le llama es en sí llaman MyClass.ClassMethod()
, lo que significa que el método de hacer el poblamiento es ClassMethod
(esto es, por supuesto, asumiendo que el cuerpo de ClassMethod
no es en realidad esa única pass
que ha mostrado, porque si está haciendo todo esto es un ejercicio inútil).A menos que haya algún aspecto de su código que le impida referirse a la clase antes de usarlo para nada, ¿por qué no puede llamar al MyClass.ClassMethod()
después de la definición de la clase?
Y si está tratando de modificar los atributos de la clase dentro de la definición (es decir, llamando a LAMBDA dentro de la definición de MyClass, fuera de cualquier método/función/lo que sea), tal vez quiera echarle un vistazo al sección de la documentación sobre metaclasses.
En una nota lateral, si desea asignar atributos a una clase, ni siquiera necesita hacerlo dentro del cuerpo de la clase.
>>> 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, Esto funciona en Python 3, pero no en Python 2. – kennytm
@KennyTM, Funciona en Python 3 por coincidencia. Python 3 eliminó el método enlazado y simplemente devuelve la función en sí. Si bien esta es una buena decisión de diseño, conceptualmente es dudoso utilizarla para crear métodos estáticos falsos. –