2010-12-14 110 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,並使用該類的一個實例。