Как динамически создавать переменную класса в python
Мне нужно создать кучу переменных класса, и я хотел бы сделать это, перейдя по списку, подобному этому:
vars=('tx','ty','tz') #plus plenty more
class Foo():
for v in vars:
setattr(no_idea_what_should_go_here,v,0)
Возможно ли это? Я не хочу делать их для экземпляра (используя self в __init__), но как переменные класса.
Ответы
Ответ 1
Вы можете запустить код вставки сразу после создания класса:
class Foo():
...
vars=('tx', 'ty', 'tz') # plus plenty more
for v in vars:
setattr(Foo, v, 0)
Кроме того, вы можете динамически сохранять переменную во время создания класса:
class Bar:
locals()['tx'] = 'texas'
Ответ 2
Если по какой-либо причине вы не можете использовать ответ Raymond для их настройки после создания класса, то, возможно, вы могли бы использовать метакласс:
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()
Ответ 3
Поздно к стороне, но используйте type
конструктор классов!
Foo = type("Foo", (), {k: 0 for k in ("tx", "ty", "tz")})