我見過蟒蛇一類做這種事:Python類成員動態名
OBJ = A類(NAME = 「somename」) obj.somename =東西
。即類初始化創建了一個名爲參數字符串的成員。 我無法設法重現此行爲。有任何想法嗎?
我設法使用globals()[「name」] = value來做類似的事情。但是在這種情況下,創建的對象是不是「Class」對象的模塊的兒子。它可以作爲module.somename而不是obj.somename來調用。
我見過蟒蛇一類做這種事:Python類成員動態名
OBJ = A類(NAME = 「somename」) obj.somename =東西
。即類初始化創建了一個名爲參數字符串的成員。 我無法設法重現此行爲。有任何想法嗎?
我設法使用globals()[「name」] = value來做類似的事情。但是在這種情況下,創建的對象是不是「Class」對象的模塊的兒子。它可以作爲module.somename而不是obj.somename來調用。
您可以輕鬆地通過使用setattr
創建一個動態命名成員:
>>> class Foo(object):
... def __init__(self, name):
... setattr(self, name, 42)
...
>>> f = Foo('bar')
>>> f.bar
42
>>> f.bar = 'hello'
>>> f.bar
'hello'
不過請注意,這只是設置任何屬性上的類的實例是可能的任何普通班(即沒有定義 ):
>>> class Qux(object):
... pass
...
>>> q = Qux()
>>> q.foobar = 'hello'
>>> q.foobar
'hello'
您可以創建一個動態命名固定值屬性是這樣的:
class MyClass():
def __init__(self, attr):
self.__dict__[attr] = 'some_value'
或者作爲調用函數要創造儘可能多的屬性:
class MyClass():
def __init__(self, *argv, **kwargs):
for key,value in kwargs.items():
self.__dict__[key] = value
你可以做'obj.somename = something'上*類的所有*實例(也沒有定義'__slots__')。問題是,你是否期望一些特定的行爲,比如屬性是用什麼進行初始化? – 2014-11-22 11:22:22