python OOP,访问属性

时间:2011-01-20 14:45:37

标签: python

当我尝试从NewOne类访问属性“self.b”时,为什么会出现“AttributeError:'NewOne'对象没有属性'self.b'”错误消息。我的意思是它就在那里。

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或什么? 感谢

2 个答案:

答案 0 :(得分:6)

替换这个:

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

由此:

k = getattr(u, 'b')

甚至更好:

k = u.b

答案 1 :(得分:2)

你应该写

k = getattr(u, 'b')

或更好

k = u.b

代替。

该属性的名称为b,而非self.b。通常您通过obj.attr访问属性 - 仅当属性的名称是动态的时才需要getattr()表单(即在编写代码时未知,但在运行时计算)。