【问题标题】:Python: Adding Fields to Objects DynamicallyPython:动态地向对象添加字段
【发布时间】:2011-05-25 12:07:23
【问题描述】:

我想知道是否可以动态地向对象添加字段。例如,我希望能够添加如下内容:

user = object()
user.first_name = 'John'
user.last_name = 'Smith'

当我在 Python 命令行解释器中执行它时,我得到:

AttributeError: 'object' object has no attribute 'first_name'

有什么想法吗?

【问题讨论】:

    标签: python metaprogramming


    【解决方案1】:

    试试这个:

    class Object:
        pass
    
    obj = Object()
    obj.x = 5
    

    【讨论】:

    • 谢谢,这对我有用。我有两个问题 1) 这里的“pass”关键字是什么意思? 2) 如果我的代码中有另一个 Object() 实例 obj2,obj.x 会创建 obj2.x(带有一些未定义的值)吗?
    • 1) 关于pass: docs.python.org/tutorial/controlflow.html#pass-statements 2) 不,当您执行obj.x = 5 时,您只需将x 属性添加到Object 的单个实例。如果您希望所有 Object 实例共享 x,则必须执行 Object.x = 5
    • 在 Python 中没有未定义值之类的东西 - 它最接近的是 None。以 gruszczy 建议的方式创建的对象没有任何类型的“原型”;您可以随意添加和删除属性,它对Object类的任何其他实例都没有影响。
    • 用属性伪造对象的好方法,谢谢!
    【解决方案2】:

    您不能像这样分配给object 实例的属性。从object 派生,并使用该类的实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-08
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      • 2019-03-03
      相关资源
      最近更新 更多