我需要制作一堆类变量,我想通过循环遍历这样的列表来做到这一点:
vars=('tx','ty','tz') #plus plenty more
class Foo():
for v in vars:
setattr(no_idea_what_should_go_here,v,0)
是否可以?我不想将它们作为一个实例(在 __init__ 中使用 self),而是作为类变量。
我需要制作一堆类变量,我想通过循环遍历这样的列表来做到这一点:
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'
如果出于任何原因您不能使用 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()
迟到但使用type
类构造函数!
Foo = type("Foo", (), {k: 0 for k in ("tx", "ty", "tz")})
该locals()
版本在课堂上对我不起作用。
以下可用于动态创建类的属性:
class namePerson:
def __init__(self, value):
exec("self.{} = '{}'".format("name", value)
me = namePerson(value='my name')
me.name # returns 'my name'