我见过蟒蛇一类做这种事: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