码迷,mamicode.com
首页 > 编程语言 > 详细

面对对象之继承 | Python

时间:2018-01-12 20:27:33      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:验证   顺序   网上   init   类继承   bsp   add   name   深度优先   

1.Son继承Parent这个基类,可以直接调用基类中的方法,
  但是,如果要在子类中__init__()方法下添加新属性,
  需要主动调用基类的__init__()方法,因为,子类不会
  自动调用基类的__init__()方法。
  class Son(Parent):
    def __init__(self,name):
        Parent.__init__(self)
        self.name = Mic
    def run(self):
        pass
        
2.在基类方法之上,再添加一些操作:
  class Son(Parent):
    def run(self):
        print(---add---)
        Parent.run(self)
  # 注意:当前类创建的实例调用了run()方法,并不是在Parent类中实现;
  # --- >> 引入super()
  class Sun(Parent):
    def run(self):
        print(---add---)
        super(Son,self).run()
    # super()的优点在于,不需要指定基类继承方法,可以从所有的基类中
    # 找到这个方法继承;
  # -- >> 在python3中对super做了简化:
    super().run()
    
3.多继承中的属性查找顺序
  # 分别提供了两条线路:位置,特殊性:
  # 位置,表示继承时所在参数位置;
  # 特殊性,表示是否有父类,以及有几层父类;
  
  # 其实,基类查找的顺序是按照C3线性化算法确定的,而不是网上说的
  # 深度优先,广度优先这样简单的算法;
  # 在类继承设计的过程中,可能会出验证的问题,位置与特殊性冲突:
      class X(object):
        pass
      clas Y(X):
        pass
      class Z(X,Y):
        pass
  # 上面的例子就会报错;TypeError

 

面对对象之继承 | Python

标签:验证   顺序   网上   init   类继承   bsp   add   name   深度优先   

原文地址:https://www.cnblogs.com/pymkl/p/8277397.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!