创建动态定义属性的Python类

时间:2011-03-01 11:57:28

标签: python metaprogramming

很抱歉,如果之前有人询问过。是否可以在Python中动态创建类,其中属性未在类的__init__方法中定义。

例如使用此类

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

我可以在初始化过程中动态输入属性,如下所示:

person = Person(name='Joe')

并像这样访问:

person.name
>>> Joe

谢谢

2 个答案:

答案 0 :(得分:14)

最简单的方法是将关键字参数dict分配给类的__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()

答案 1 :(得分:0)

这可以通过使用descriptorsdetailed explanation)来实现。这也使您可以在创建对象后添加属性。