2011-01-20 81 views
1

當我嘗試從NewOne類訪問屬性'self.b'時,爲什麼我得到一個「AttributeError:'NewOne'對象沒有屬性'self.b'」錯誤消息。我的意思是在那裏。python OOP,訪問屬性

class NewOne(object): 
    def __init__(self): 
     self.b = 'Cat' # this is what i want to access 
    def child(self): 
     self.c = 'kitten' 
     return self.c 

class FatherClass(object): 
    def __init__(self, a): 
     self.a = a 
    def son(self): 
     self.i = 'I and my father' 
     return self.i 
    def father(self): 
     self.x = 'are one' 
     return self.x 
    def father_son(self): 
     u = NewOne() 
     k = getattr(u, 'self.b') #why does it tell me NewOne has no self.b attr 
     return self.a, k() 

是不是getattr用來訪問方法?爲什麼它被稱爲getattr而不是getmeth或什麼? 感謝

回答

6

替換此

k = getattr(u, 'b') 

甚至更​​好只是做:只需要

k = u.b 
+1

+1:「更好......」 – 2011-01-20 14:52:59

2

應該又餓寫

k = getattr(u, 'b') 

或更好

k = u.b 

代替。

屬性的名稱是b,而不是self.b。通常您通過obj.attr訪問屬性 - 僅當屬性的名稱是動態的(即在編寫代碼時未知,但在運行時計算)時才需要getattr()表單。本

k = getattr(u, 'self.b') 

+0

「的GETATTR()形式,如果的名字屬性是動態的「這是照明。謝謝。 – kassold 2011-01-20 15:11:35