加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 海宁网 (https://www.hainingwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

Python父类方式重写 入门必读

发布时间:2022-07-07 02:29:46 所属栏目:编程 来源:互联网
导读:前面讲过在 Python 中,子类继承了父类,那么子类就拥有了父类所有的类属性和类方法。通常情况下,子类会在此基础上,扩展一些新的类属性和类方法。 但凡事都有例外,我们可能会遇到这样一种情况,即子类从父类继承得来的类方法中,大部分是适合子类使用的,
  前面讲过在 Python 中,子类继承了父类,那么子类就拥有了父类所有的类属性和类方法。通常情况下,子类会在此基础上,扩展一些新的类属性和类方法。
 
  但凡事都有例外,我们可能会遇到这样一种情况,即子类从父类继承得来的类方法中,大部分是适合子类使用的,但有个别的类方法,并不能直接照搬父类的,如果不对这部分类方法进行修改,子类对象无法使用。针对这种情况,我们就需要在子类中重复父类的方法。
 
  举个例子,鸟通常是有翅膀的,也会飞,因此我们可以像如下这样定义个和鸟相关的类:
  class Bird:
      #鸟有翅膀
      def isWing(self):
          print("鸟有翅膀")
      #鸟会飞
      def fly(self):
          print("鸟会飞")
  但是,对于鸵鸟来说,它虽然也属于鸟类,也有翅膀,但是它只会奔跑,并不会飞。针对这种情况,可以这样定义鸵鸟类:
  class Ostrich(Bird):
      # 重写Bird类的fly()方法
      def fly(self):
          print("鸵鸟不会飞")
  可以看到,因为 Ostrich 继承自 Bird,因此 Ostrich 类拥有 Bird 类的 isWing() 和 fly() 方法。其中,isWing() 方法同样适合 Ostrich,但 fly() 明显不适合,因此我们在 Ostrich 类中对 fly() 方法进行重写。
  重写,有时又称覆盖,是一个意思,指的是对类中已有方法的内部实现进行修改。
 
  在上面 2 段代码的基础上,添加如下代码并运行:
  class Bird:
      #鸟有翅膀
      def isWing(self):
          print("鸟有翅膀")
      #鸟会飞
      def fly(self):
          print("鸟会飞")
  class Ostrich(Bird):
      # 重写Bird类的fly()方法
      def fly(self):
          print("鸵鸟不会飞")
  # 创建Ostrich对象
  ostrich = Ostrich()
  #调用 Ostrich 类中重写的 fly() 类方法
  ostrich.fly()
  运行结果为:
  鸵鸟不会飞
 
  显然,ostrich 调用的是重写之后的 fly() 类方法。
  如何调用被重写的方法
  事实上,如果我们在子类中重写了从父类继承来的类方法,那么当在类的外部通过子类对象调用该方法时,Python 总是会执行子类中重写的方法。
 
  这就产生一个新的问题,即如果想调用父类中被重写的这个方法,该怎么办呢?
 
  很简单,前面讲过,Python 中的类可以看做是一个独立空间,而类方法其实就是出于该空间中的一个函数。而如果想要全局空间中,调用类空间中的函数,只需要在调用该函数是备注类名即可。举个例子:
  class Bird:
      #鸟有翅膀
      def isWing(self):
          print("鸟有翅膀")
      #鸟会飞
      def fly(self):
          print("鸟会飞")
  class Ostrich(Bird):
      # 重写Bird类的fly()方法
      def fly(self):
          print("鸵鸟不会飞")
  # 创建Ostrich对象
  ostrich = Ostrich()
  #调用 Bird 类中的 fly() 方法
  Bird.fly(ostrich)
  程序运行结果为:
  鸟会飞
 
  此程序中,需要大家注意的一点是,使用类名调用其类方法,Python 不会为该方法的第一个 self 参数自定绑定值,因此采用这种调用方法,需要手动为 self 参数赋值。
  通过类名调用实例方法的这种方式,又被称为未绑定方法。

(编辑:财气旺网 - 海宁网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!