2011-01-20 71 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