我在python中看过一个类,它做了类似的事情:
obj = Class(name =“somename”) obj.somename =某事
即类初始化创建了一个名为参数字符串的成员。 我无法重现这种行为。有什么想法吗?
我设法使用globals()[“name”] = value做类似的事情。但在这种情况下,创建的对象是模块的子,而不是“Class”对象的子模块。它可以作为module.somename而不是obj.somename调用。
答案 0 :(得分:1)
您可以使用setattr
:
>>> class Foo(object):
... def __init__(self, name):
... setattr(self, name, 42)
...
>>> f = Foo('bar')
>>> f.bar
42
>>> f.bar = 'hello'
>>> f.bar
'hello'
但是请注意,对于任何常规类(不定义__slots__
),只能在类的实例上设置任何属性:
>>> class Qux(object):
... pass
...
>>> q = Qux()
>>> q.foobar = 'hello'
>>> q.foobar
'hello'
答案 1 :(得分:0)
您可以创建动态命名的固定值属性,如下所示:
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