Python 基础教程

Python 流程控制

Python 函数

Python 数据类型

Python 文件操作

Python 对象和类

Python 日期和时间

Python 高级知识

Python 参考手册

Python 继承

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

什么是继承?

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

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

Python继承语法

class BaseClass:
  #基类主体
class DerivedClass(BaseClass):
  #派生类的主体

派生类从基类继承要素,并向其添加新要素。这可以提高代码的可重用性。

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("输入边长 "+str(i+1)+" : ")) for i in range(self.n)]

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

此类具有数据属性,用于存储边数,边和每边的大小作为列表,即边数

方法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
        # 计算半周长
        s = (a + b + c) / 2
        area = (s*(s-a)*(s-b)*(s-c)) ** 0.5
        print('三角形的面积是 %0.2f' %area)

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

>>> t = Triangle()

>>> t.inputSides()
输入边长 1 : 3
输入边长  2 : 5
输入边长  3 : 4

>>> t.dispSides()
边长 1 是 3.0
边长 2 是 5.0
边长 3 是 4.0

>>> t.findArea()
三角形的面积是 6.00

我们可以看到,尽管我们没有为类Triangle定义inputSides()或sides()之类的方法,但是我们能够使用它们。

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

Python中的方法重写

在上面的示例中,请注意,在Triangle和Polygon这两个类中都定义了__init __()方法。 发生这种情况时,派生类中的方法将覆盖基类中的方法。 也就是说,Triangle中的__init __()优先于Polygon中的__init __()。

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

更好的选择是使用内置函数super()。因此,super().__init__(3)等效于Polygon.__init__(self,3)并且是首选。您可以了解有关的更多信息。

两个内置函数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