我需要一堆类变量的,我想通过这样的一个列表循环,从而做到这一点:如何创建类变量,动态地在python
vars=('tx','ty','tz') #plus plenty more
class Foo():
for v in vars:
setattr(no_idea_what_should_go_here,v,0)
这可能吗?我不想让它们作为实例(在__init__中使用self),而是作为类变量。
我需要一堆类变量的,我想通过这样的一个列表循环,从而做到这一点:如何创建类变量,动态地在python
vars=('tx','ty','tz') #plus plenty more
class Foo():
for v in vars:
setattr(no_idea_what_should_go_here,v,0)
这可能吗?我不想让它们作为实例(在__init__中使用self),而是作为类变量。
您可以运行一个类被创建后立即插入代码:
class Foo():
...
vars=('tx', 'ty', 'tz') # plus plenty more
for v in vars:
setattr(Foo, v, 0)
此外,您还可以动态存储变量被创建的类,而:
class Bar:
locals()['tx'] = 'texas'
啊。这很酷。我会给它一个去看看我工作的API是否可以处理。谢了哥们! – pawel
如果由于某种原因你不能使用雷蒙德创建课程后设置它们的答案,那么也许你可以使用元类:
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()
'name' for for循环与'__new__'参数冲突 –
@UszyWieloryba谢谢,更正 – Duncan
晚会但使用type
class constructor!
Foo = type("Foo",(), {k: 0 for k in ("tx", "ty", "tz")})
为什么不把它们放在字典中? – DrTyrsa
你想分享不同实例之间的变量吗? – luc
不确定。最有可能的。需求来自API,我不知道它们在那里如何使用。 – pawel