1. 首页
  2. 技术文章

36、Python继承

继承使我们能够定义一个类,该类从父类中获取所有功能,并允许我们添加更多功能。在本教程中,您将学习在Python中使用继承。

Python中的继承

继承是面向对象编程中的一项强大功能。

它指的是定义一个新,而对现有类的修改很少或没有修改。新类称为派生(子类),而继承的新类称为基类(或父类)


Python继承语法

class BaseClass:
  Body of base class
class DerivedClass(BaseClass):
  Body of derived class

派生类从基类继承功能,可以在其中添加新功能。这导致代码的可重用性。


Python中的继承示例

为了演示继承的使用,让我们举一个例子。

多边形是具有3个或更多边的闭合图形。说,我们有一个名为的类,Polygon定义如下。

class Polygon:
    def __init__(self, no_of_sides):
        self.n = no_of_sides
        self.sides = [0 for i in range(no_of_sides)]

    def inputSides(self):
        self.sides = [float(input("Enter side "+str(i+1)+" : ")) for i in range(self.n)]

    def dispSides(self):
        for i in range(self.n):
            print("Side",i+1,"is",self.sides[i])

此类具有数据属性来存储边数 ñ 每一面的大小和大小称为列表 sides

inputSides()方法吸收每侧的大小并dispSides()显示这些侧边的长度。

三角形是具有3个边的多边形。因此,我们可以创建一个名为Triangle 继承自 Polygon。这使得所有属性Polygon可供使用的课程 Triangle 班级。

我们不需要再次定义它们(代码可重用性)。 Triangle可以定义如下。

class Triangle(Polygon):
    def __init__(self):
        Polygon.__init__(self,3)

    def findArea(self):
        a, b, c = self.sides
        # calculate the semi-perimeter
        s = (a + b + c) / 2
        area = (s*(s-a)*(s-b)*(s-c)) ** 0.5
        print('The area of the triangle is %0.2f' %area)

但是,classTriangle具有一种新方法findArea()来查找和打印三角形的区域。这是一个示例运行。

>>> t = Triangle()

>>> t.inputSides()
Enter side 1 : 3
Enter side 2 : 5
Enter side 3 : 4

>>> t.dispSides()
Side 1 is 3.0
Side 2 is 5.0
Side 3 is 4.0

>>> t.findArea()
The area of the triangle is 6.00

我们可以看到,即使我们没有这样定义的方法inputSides()dispSides()Triangle分开,我们能够使用它们。

如果在类本身中找不到属性,则搜索继续到基类。如果基类本身是从其他类派生的,则将以递归方式重复此操作。


Python中的方法重写

在上面的示例中,请注意,__init__()在两个类中都定义了方法,三角形 以及 多边形。发生这种情况时,派生类中的方法将覆盖基类中的方法。也就是说,__init__()三角形获得优先__init__多边形

通常,当覆盖基本方法时,我们倾向于扩展定义而不是简单地替换它。通过从派生类中的方法调用基类中的方法(Polygon.__init__()__init__()in中调用Triangle)来完成相同的工作。

更好的选择是使用内置函数super()。因此,super().__init__(3)等同于Polygon.__init__(self,3)并且是优选的。要了解有关super()Python函数的更多信息,请访问Python super()function

两个内置函数isinstance()issubclass()用于检查继承。

如果对象是该类或从其派生的其他类的实例,则该函数isinstance()返回True。Python中的每个类都继承自基类object

>>> isinstance(t,Triangle)
True

>>> isinstance(t,Polygon)
True

>>> isinstance(t,int)
False

>>> isinstance(t,object)
True

同样,issubclass()用于检查类的继承。

>>> issubclass(Polygon,Triangle)
False

>>> issubclass(Triangle,Polygon)
True

>>> issubclass(bool,int)
True
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站不拥有所有权,不承担相关法律责任。如发现有侵权/违规的内容, 联系QQ1841324605,本站将立刻清除。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

服务热线:130-0886-1890

QR code