美文网首页
我的Python学习之路8

我的Python学习之路8

作者: 观语小白 | 来源:发表于2020-03-17 22:27 被阅读0次

重写

  • 如果在子类中如果有和父类同名的方法,则通过子类实例去调用方法时,
    • 会调用子类的方法而不是父类的方法,这个特点我们成为叫做方法的重写(覆盖,override)
  • 当我们调用一个对象的方法时,
    • 会优先去当前对象中寻找是否具有该方法,如果有则直接调用
      • 如果没有,则去当前对象的父类中寻找,如果父类中有则直接调用父类中的方法,
      • 如果没有,则去父类的父类中寻找,以此类推,直到找到object,如果依然没有找到,则报错

继承

  • 父类中的所有方法都会被子类继承,包括特殊方法,也可以重写特殊方法
    • 希望可以直接调用父类的__init__来初始化父类中定义的属性
  • super()可以用来获取当前类的父类,
    • 并且通过super()返回对象调用父类方法时,不需要传递self

多重继承

class A(object):
    def test(self):
        print('AAA')

class B(object):
    def test(self):
        print('B中的test()方法~~')

    def test2(self):
        print('BBB') 
class C(A,B):
    pass

  • 在Python中是支持多重继承的,也就是我们可以为一个类同时指定多个父类
    • 可以在类名的()后边添加多个类,来实现多重继承
  • 多重继承,会使子类同时拥有多个父类,并且会获取到所有父类中的方法
  • 在开发中没有特殊的情况,应该尽量避免使用多重继承,因为多重继承会让我们的代码过于复杂
  • 如果多个父类中有同名的方法,则会现在第一个父类中寻找,然后找第二个,然后找第三个。。。
  • 前边父类的方法会覆盖后边父类的方法
  • 类名.__bases__这个属性可以用来获取当前类的所有父类
print(B.__bases__) (<class 'object'>,)
print(C.__bases__) (<class '__main__.A'>, <class '__main__.B'>)

相关文章

网友评论

      本文标题:我的Python学习之路8

      本文链接:https://www.haomeiwen.com/subject/zqtfyhtx.html