otra - poo python 3
Cómo crear una variable de clase dinámicamente en Python (3)
Puede ejecutar el código de inserción inmediatamente después de crear una clase:
class Foo():
...
vars=(''tx'', ''ty'', ''tz'') # plus plenty more
for v in vars:
setattr(Foo, v, 0)
Además, puede almacenar dinámicamente la variable mientras se crea la clase:
class Bar:
locals()[''tx''] = ''texas''
Necesito hacer un montón de variables de clase y me gustaría hacerlo repitiendo una lista como esa:
vars=(''tx'',''ty'',''tz'') #plus plenty more
class Foo():
for v in vars:
setattr(no_idea_what_should_go_here,v,0)
¿Es posible? No quiero hacerlos para una instancia (usando self en el __init__) sino como variables de clase.
Si por alguna razón no puede usar la respuesta de Raymond de configurarlos después de la creación de la clase, tal vez podría usar una metaclase:
class MetaFoo(type):
def __new__(mcs, classname, bases, dictionary):
for name in dictionary.get(''_extra_vars'', ()):
dictionary[name] = 0
return type.__new__(mcs, classname, bases, dictionary)
class Foo(): # For python 3.x use ''class Foo(metaclass=MetaFoo):''
__metaclass__=MetaFoo # For Python 2.x only
_extra_vars = ''tx ty tz''.split()
Tarde a la fiesta pero usa el constructor de clase de type
!
Foo = type("Foo", (), {k: 0 for k in ("tx", "ty", "tz")})