创建动态定义属性的Python类

5 投票
2 回答
2145 浏览
提问于 2025-04-16 12:44

抱歉,如果这个问题之前有人问过。请问在Python中,有没有办法动态创建一个类,而这个类的属性并不是在__init__方法中定义的呢?

比如说,使用这个类:

class Person(object):
  def __init__(self):
    ...

我可以在初始化的时候动态地添加属性,像这样:

person = Person(name='Joe')

然后可以这样访问它:

person.name
>>> Joe

谢谢!

2 个回答

0

这可以通过使用描述符来实现(详细解释)。这样做还可以让你在对象创建后添加属性。

14

最简单的方法就是把关键字参数字典赋值给类的 __dict__ 属性:

class Person(object):
    def __init__(self, **kw):
        self.__dict__ = kw
person = Person(name='Joe')
print person.name

这段代码会输出

Joe

如果你想在对象创建后添加属性,可以使用

def add_attributes(self, **kw):
    self.__dict__.update(kw)

你也可以在构造函数里使用 .update() 方法。

撰写回答