创建动态定义属性的Python类

Jos*_*ogi 5 python metaprogramming

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

例如,这个类

class Person(object):
  def __init__(self):
    ...
Run Code Online (Sandbox Code Playgroud)

我可以在初始化期间动态地输入属性,如下所示:

person = Person(name='Joe')

并像这样访问它:

person.name
>>> Joe
Run Code Online (Sandbox Code Playgroud)

谢谢

Sve*_*ach 14

最简单的方法是将关键字参数dict分配给__dict__类的属性:

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

版画

Joe
Run Code Online (Sandbox Code Playgroud)

要在创建对象后添加属性,请使用

def add_attributes(self, **kw):
    self.__dict__.update(kw)
Run Code Online (Sandbox Code Playgroud)

您也可以.update()在构造函数中使用.