2010-12-14 115 views
7

我想知道是否有可能动态地添加字段到对象。举例来说,我希望能够加入这样的:Python:动态添加字段到对象

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

当我执行的是Python命令行解释器,我得到:

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

任何想法?

回答

14

试试这个:

class Object: 
    pass 

obj = Object() 
obj.x = 5 
+0

谢谢你,为我工作。我有两个问题1)'pass'关键字在这里意味着什么? 2)如果我的代码中有Object()的另一个实例obj2,obj.x是否会创建obj2.x(带有一些未定义的值)? – Rafid 2010-12-14 19:39:41

+1

1)关于'pass':http://docs.python.org/tutorial/controlflow.html#pass-statements 2)不,当你做'obj.x = 5'时,你只需要添加'x'属性到Object的单个实例。如果你想要所有的'Object'实例共享x,你必须做'Object.x = 5'。 – gruszczy 2010-12-14 19:43:00

+0

在Python中没有未定义的值 - 它最接近的是None。以gruszczy的方式创建的对象没有任何一种“原型”;您可以随意添加和删除属性,并且不会影响Object类的任何其他实例。 – 2010-12-14 19:52:41

5

您不能分配到像这样的object实例的属性。派生自object,并使用该类的一个实例。