从子类调用超类构造函数的原因?

时间:2014-04-28 21:44:19

标签: python inheritance

根据使用Python编程介绍 by Liang

class(superclass):

授予您访问超级

的权限
super().__init__()

实例化超类,以便您可以访问其数据字段和方法。

这似乎不正确;在下面的代码中,我使用第一个关键字class(superclass)访问超类,但从不使用 super().__ init __()启动它,但我仍然可以完全访问所有方法。

如果只是扩展父类使我能够访问它的方法,那么调用父类构造函数有什么意义呢?

参考:使用Python编程简介

CODE:

class GeometricObject:
    def __init__(self,color = "green",filled = True):
        self.__color = color
        self.__filled = filled

    def getColor(self):
        return self.__color

    def setColor(self, color):
        self.__color = color

    def isFilled(self):
        return self.__filled

    def setFilled(self,filled):
        self.__filled = filled

    def __str__(self):
        return "Color: " + self.__color + \
               " and filled: " + str(self.__filled)

class square(GeometricObject):
    def __init__(self,width,height):
        self.__width = width
        self.__height = height

    def getHeight(self):
        return self.__height
    def getWidth(self):
        return self.__width

    def setHeight(self,height):
        self.__height = height
    def setWidth(self,width):
        self.__width = width

1 个答案:

答案 0 :(得分:4)

我希望这些代码不是来自Python书籍的任何介绍:它非常非Pythonic。

但问题的答案是,扩展可让您访问方法,但不会在超类__init__中执行任何设置。在您的示例中,square的实例可以访问getColor方法,但实际调用它会产生错误,因为您从未运行GeometricObject.__init__来设置self.__color的值首先。