个性化阅读
专注于IT技术分析

python3继承 – Python3教程

上一章Python教程请查看:python3对象和类

继承使我们能够定义一个类,它继承父类的所有功能并允许我们添加更多的功能,在本文中,你将学习如何在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])

这个类有数据属性来存储边的数量,n和每个边的大小作为一个列表。

方法inputSides()考虑每个边的大小,同样地,sides()将正确显示这些大小。

三角形是有三条边的多边形,因此,我们可以创建一个名为Triangle的类,它继承自Polygon,这使得类Polygon的所有属性在Triangle中都是可用的么,我们不需要重新定义它们(代码可重用性)。三角形的定义如下。

class Triangle(Polygon):
    def __init__(self):
        Polygon.__init__(self,3)
    def findArea(self):
        a, b, c = self.sides
        # 计算semi-perimeter
        s = (a + b + c) / 2
        area = (s*(s-a)*(s-b)*(s-c)) ** 0.5
        print('三角形的面积是 %0.2f' %area)

但是,类Triangle有一个新方法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()
三角形的面积是 6.00

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

如果在类中没有找到属性,则继续搜索基类,如果基类本身是从其他类派生而来,则此操作将递归地重复。

Python中的方法覆盖

在上面的例子中,注意两个类中都定义了_init__()方法,三角形和多边形也是如此。发生这种情况时,派生类中的方法将覆盖基类中的方法,也就是说,三角形中的init__()比多边形中的具有相同的优先级。

通常,当覆盖基本方法时,我们倾向于扩展定义,而不是简单地替换它。通过从派生类中调用基类中的方法(在三角形中调用polygon._ init__() from _init__()),可以实现相同的操作。

更好的选择是使用内置函数super()。因此,super().__ init__(3)等价于polygon.__ init__(self,3),是首选的。你可以了解更多关于Python中的super()函数的信息。

两个内置函数isinstance()和issubclass()用于检查继承,函数isinstance()返回True,如果对象是该类的一个实例,或者是从该类派生的其他类,Python中的每个类都继承自基类对象。

>>> 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
赞(0)
未经允许不得转载:srcmini » python3继承 – Python3教程

评论 抢沙发

评论前必须登录!