Python继承机制如何使用

  

Python继承机制如何使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

继承是面向对象的三大特征之一,也是实现软件复用的重要手段.Python的继承是多继承机制,即一个子类可以同时有多个直接父类。

Python子类继承父类的语法是在定义子类时,将多个父类放在子类之后的圆括号里。语法格式如下:

class  Subclass  (SuperClass1, SuperClass2,,…)   ,,,#类定义部分

从上面的语法格式来看,定义子类的语法非常简单,只需在原来的类定义后增加圆括号,井在圆括号中添加多个父类,即可表明该子类继承了这些父类。

如果在定义一个Python类时并未显式指定这个类的直接父类,则这个类默认继承对象类。因此,对象类是所有类的父类,要么是其直接父类,要么是其间接父类。

实现继承的类被称为子类,被继承的类被称为父类(也被称为基类(超类)。父类和子类的关系,是一般和特殊的关系,例如水果和苹果的关系,苹果继承了水果,苹果是水果的子类,则苹果是一种特殊的水果。

由于子类是一种特殊的父类,因此父类包含的范围总比子类包含的范围要大,所以可以认为父类是大类,而子类是小类。

从实际意义上看,子类是对父类的扩展,子类是一种特殊的父类,从这个意义上看,使用继承来描述子类和父类的关系是错误的,用扩展更恰当。因此,这样的说法更加准确:苹果类扩展了水果类。

从子类的角度来看,子类扩展(扩展)了父类;但从父类的角度来看,父类派生(派生)出子类。也就是说,   扩展和派生所描述的是同一个动作,只是观察角度不同而已。

下面程序示范了子类继承父类的特点。下面是水果类的代码:

class 水果:   ,,,def 信息(自我):   ,,,,,,,印刷(“我是一个水果!重% g克“,%,self.weight)      class 食物:   ,,,def 味道(自我):   ,,,,,,,印刷(“不同食物的口感不同“)      #,定义苹果类,继承了水果和食物类   class 苹果(水果,食物):   ,才能通过      #,创建苹果对象   时间=a 苹果()   a.weight  5.6=,   #,调用苹果对象的info()方法   a.info ()   #,调用苹果对象的味道()方法   a.taste ()

上面程序开始定义了两个父类:水果类和粮食类、接下来程序定义了一个苹果类,该苹果类基本上是一个空类。

在主程序部分,主程序,创建了苹果对象之后,可以访问底苹果对象的味道info()和()方法,这表明苹果对象也具有味道了info()和()方法,这就是继承的作用,即子类扩展(继承)了父类,将可以继承得到父类定义的方法,这样子类就可复用父类的方法了。

关于Python的多继承

大部分面向对象的编程语言(除了c++)都只支持单继承,而不支持多继承,这是由于多继承不仅增加了编程的复杂度,而且很容易导致一些莫名的错误。

Python虽然在语法上明确支持多继承,但通常推荐如果不是很有必要,则尽量不要使用多继承,而是使用单继承,这样可以保证编程思路更清晰,而且可以避免很多麻烦。

当一个子类有多个直接父类时,该子类会继承得到所有父类的方法,这一点在前面示例中己经做了示范。现在的问题是,如果多个父类中包含了同名的方法,此时会发生什么呢?此时排在前面的父类中的方法会“遮蔽”排在后面的父类中的同名方法,例如如下代码:

class 单品:   ,,,def  info (自我):   ,,,,,,,印刷(“项目中方法:“,,& # 39;这是一个商品& # 39;)   class 产品:   ,,,def  info (自我):   ,,,,,,,印刷(“产品中方法:“,,& # 39;这是一个工业产品& # 39;)   # class 鼠标(项目,产品):,#①   class 鼠标(产品,项目):,#①   ,才能通过   时间=m 鼠标()   m.info ()

上面①号粗体字代码让老鼠继承了项目类和产品类,由于项目排在前面,因此项目中定义的方法优先级更好,Python会优先到项父类中搜寻方法,一旦在项父类中搜寻到目标方法,Python就不会继续向下搜寻了。

上面程序中项目和产品两个父类中都包含了info()方法,当老鼠子类对象调用信息()方法时(子类中没有定义信息()方法,因此Python会从父类中寻找info()方法),此时优先使用第一个父类中项的信息()方法。

Python继承机制如何使用