关于类:调用祖父母方法x时,python”‘y”对象没有属性”x”

python “'y' object has no attribute 'x'” when calling a grandparent method x

我正试图从下面的类中调用祖父母方法getcolor()。

这是它自己文件中的祖父母类:

1
2
3
4
5
6
7
8
9
10
11
class IsVisible(object):
    def __init__(self):
        pass
    white = (255,255,255)
    black = (0,0,0)
    red = (255,0,0)
    blue = (0,0,255)
    green = (0,255,0)

def getColor(self):
        return self.color

这是父类和子类。

1
2
3
4
5
6
7
8
9
10
11
12
13
from IsVisible import *
class Object(IsVisible):
    def __init__(self):
        super(Object, self).__init__()
        self.posSize = []
    def getPosSize(self):
        return self.posSize

class Rectangle(Object):
    def __init__(self):
        super(Rectangle, self).__init__()
        self.color = self.blue
        self.posSize = [20,50,100,100]

所以我试图通过创建一个对象来调用getColor

1
rectangle = Rectangle()

然后打电话

1
rectangle.getColor()

但是我得到了一个错误。即:

1
AttributeError: 'Rectangle' object has no attribute 'getColor'

现在我不知道如何解决这个问题。我试过在谷歌上搜索"python call grandrent method",但我只得到如何调用溢出的方法的说明…我相信我说的遗产是正确的,所以我不知道问题出在哪里。有人能帮我吗?


如果这只是一个缩影(没有其他东西会跳出来攻击我)—

1
2
3
4
5
6
7
8
9
10
11
class IsVisible(object):
    def __init__(self):
        pass
    white = (255,255,255)
    black = (0,0,0)
    red = (255,0,0)
    blue = (0,0,255)
    green = (0,255,0)

    def getColor(self):    # <--- indent this
        return self.color

但是要注意类和实例变量。更多信息请参阅此答案(此处不复制,因为它不是上述问题的答案)。

另外,请不要使用Object作为类的名称:)。它太可能导致与真实的Object混淆,或使读者对你的意思感到困惑。用ColoredShape代替IsVisible,用PositionedShape代替Object,用Rectangle(PositionedShape)怎么样?