我需要一堆類變量的,我想通過這樣的一個列表循環,從而做到這一點:如何創建類變量,動態地在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