具有动态名称的Python类成员

时间:2014-11-22 11:19:21

标签: python class dynamic

我在python中看过一个类,它做了类似的事情:

obj = Class(name =“somename”) obj.somename =某事

即类初始化创建了一个名为参数字符串的成员。 我无法重现这种行为。有什么想法吗?

我设法使用globals()[“name”] = value做类似的事情。但在这种情况下,创建的对象是模块的子,而不是“Class”对象的子模块。它可以作为module.somename而不是obj.somename调用。

2 个答案:

答案 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