Подтвердить что ты не робот

Как динамически создавать переменную класса в 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__), но как переменные класса.

4b9b3361

Ответ 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()