Python 继承

Python 继承

继承是面向对象编程方法中最重要的特性之一。它通常在使用诸如JavaPHP、Python等许多语言进行软件开发过程中使用。

您可以通过在新类名称后的括号中列出父类来创建一个类,而不是从头开始。

如果您需要设计一个新类,其中大部分属性在现有类中已经很好地定义了,那么为什么要重新定义它们呢?继承允许重复使用现有类的能力,并在需要时扩展以设计新的类。

当一个新类与现有类具有“IS A”关系时,继承就发挥作用。汽车是一种车辆,公交车也是一种车辆;自行车也是一种车辆。这里的父类是车辆,而汽车、公交车和自行车是子类。

Python 继承

语法

派生类的声明方式与其父类类似;但是,在类名后面要给出要继承的基类列表 –

class SubClassName (ParentClass1[, ParentClass2, ...]):
   'Optional class documentation string'
   class_suite

示例

class Parent: # define parent class
   def __init__(self):
      self.attr = 100
      print ("Calling parent constructor")
   def parentMethod(self):
      print ('Calling parent method')
   def set_attr(self, attr):
      self.attr = attr

   def get_attr(self):
      print ("Parent attribute :", self.attr)

class Child(Parent): # define child class
   def __init__(self):
      print ("Calling child constructor")

   def childMethod(self):
      print ('Calling child method')

c = Child()      # instance of child
c.childMethod()  # child calls its method
c.parentMethod() # calls parent's method
c.set_attr(200)  # again call parent's method
c.get_attr()     # again call parent's method

输出

当您执行此代码时,它将产生以下输出−

Calling child constructor
Calling child method
Calling parent method
Parent attribute : 200

Python – 多重继承

在Python中,多重继承允许你基于多个父类构建一个类。因此,子类继承了所有父类的属性和方法。子类可以重写来自任何父类的方法。

语法

class parent1:
   #statements

class parent2:
   #statements

class child(parent1, parent2):
   #statements

Python的标准库中有一个内置的divmod()函数,它返回一个包含两个元素的元组。第一个元素是两个参数的商,第二个元素是两个操作数的模值。

示例

这个示例试图模拟divmod()函数。我们定义了两个类division和modulus,然后有一个继承它们的div_mod类。

class division:
   def __init__(self, a,b):
      self.n=a
      self.d=b
   def divide(self):
      return self.n/self.d
class modulus:
   def __init__(self, a,b):
      self.n=a
      self.d=b
   def mod_divide(self):
      return self.n%self.d

class div_mod(division,modulus):
   def __init__(self, a,b):
      self.n=a
      self.d=b
   def div_and_mod(self):
      divval=division.divide(self)
      modval=modulus.mod_divide(self)
      return (divval, modval)

子类有一个新的方法div_and_mod(),该方法内部调用其继承类的divide()和mod_divide()方法来返回除法和求余值。

x=div_mod(10,3)
print ("division:",x.divide())
print ("mod_division:",x.mod_divide())
print ("divmod:",x.div_and_mod())

输出

division: 3.3333333333333335
mod_division: 1
divmod: (3.3333333333333335, 1)

方法解析顺序(MRO)

术语“方法解析顺序”与Python中的多重继承有关。在Python中,继承可能分布在多个层级上。假设A是B的父类,B是C的父类。类C可以重写继承的方法,或者其对象可以按照其父类中定义的方式调用它。那么,Python如何找到适当的方法进行调用。

每个Python类都有一个mro()方法,该方法返回Python解析要调用的方法的层次顺序。解析顺序是从继承顺序的底部到顶部。

在我们以前的例子中,div_mod类继承了division和modulus类。因此,mro方法返回的顺序如下 –

[<class '__main__.div_mod'>, <class '__main__.division'>, <class '__main__.modulus'>, <class 'object'>]

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程