与多个父母的多重继承

时间:2019-04-27 14:26:16

标签: python python-3.x multiple-inheritance

基础是超类。
它具有实例变量=
它具有 show()方法,该方法给出了边数的值。

圆圈继承了基础
它具有 show()方法,该方法会打印类名。

三角形继承了基础
它具有 show()方法,该方法会打印类名。

正方形继承了基础
它具有 show()方法,该方法会打印类名。

形状继承了圆形三角形正方形
它具有 show()方法,该方法可打印“我的体形”

我们必须创建 Shape 类的实例,并使用创建的实例访问 Circle 类的 show()方法。 / p>

我只想访问 Circle show()方法,而不能访问 Shape < / strong>课程。

我该怎么做?

class Base:
    def __init__(self,sides):
        self.sides=sides

    def show(self):
        return self.sides

class Triangle(Base):
    def show(self):
        print("Triangle")

class Square(Base):
    def show(self):
        print("Square")

class Circle(Base):
    def show(self):
        print("Circle")

class Shape(Circle,Square,Triangle):
    def __init__(self):
        super(Shape,self).show()
    def show(self):
        print("i am in shape")

a=Shape()
a.show()

我试图将输出显示为:

Circle

但是代码给我的输出是:

Circle
i am in shape

如果我必须使用Shape类的实例通过a.show()调用Circle类的show方法,代码将如何更改?

1 个答案:

答案 0 :(得分:0)

您应该将super(Shape,self).show()保留原样,而只是实例化Shape,它将如下打印Circle。您正在呼叫的a.show()额外费用i am in shape

class Shape(Circle,Square,Triangle):

    def __init__(self):
        super(Shape,self).show()

    def show(self):
        print("i am in shape")

#The constructor is called
a=Shape()
#Circle

#The show function of class Shape is called
a.show()
#i am in shape

如果要显式访问show的{​​{1}}方法,则需要实例化该对象。

Circle

此外,请查看:How does Python's super() work with multiple inheritance?,以获得有关super如何用于多重继承的更多信息