继承是一种关系,描述两个对象之间父与子的关系。
在程序中,继承描述的时类和类之间的关系。例如A继承B,A就能使用B的方和属性。A称之为B的父类(也成为基类),B是A的子类。
继承的一方可以直接使用被继承一方已经有的东西。其目的是为了重用已经有的代码,提高代码重用性。
继承的语法格式:
class 类名称(父类的名称):
类的内容
#在python中 一个子类可以同时继承多个父类
继承的步骤:
1、先将子类中相同的部分进行抽取,形成一个新的类,这个过程称为抽象的过程
2、根据继承类的语法,继承抽象出来的类
被继承的类也可以是已经存在的类,继承该种类是为了扩展或修改原始的功能。
当子类中存在不同于父类的属性或者方法时,此时的子类也叫派生类。
当子类继承父类的方法并在子类中重新写该方法的内部代码时,该过程叫覆盖,也叫重写。
有三种方法
方式1:
super(当前类名称,self).你要调的父类的属性或方法
方式2:
super().你要调的父类的属性或方法
方式3:
类名称.你要调的父类的属性或方法(self)
#方式3与继承无关
PS:当你继承一个现有的类,并且你覆盖了父类的init()方法时,必须在初始化方法的第一行调用父类的初始化方法,并传入父类所需的参数
当每一层只继承一个类的时候:
对象自己的 - > 所在类中 -> 找父类 - >父类的父类 ->Object(从左往右一次查找)
class A:
text = "haha"
class B(A):
text = "heihei"
pass
b = B()
b.text = "xixi"
print(b.text)
# xixi存在先拿对象自己的xixi
# xixi不存在时,先拿子类的heihei
# 再拿父类haha
# 最后在object中查找,不存在即报错
当每个类继承多个类且继承多层时:
? 在python3中,类都是新式类,出现菱形类的时候,即遇到继承共同父类的时候,先广度优先,即先在同级横向从左往右查找,当遇到单挑继承或者有分叉时,遵循深度优先,即选择一条路一直查到没有父类或者找到需要的属性或者方法;在python2中,当类时经典类的时候,此时类的查找顺序为深度优先。
组合也是一种关系,描述两个对象之间谁拥有谁的关系。
在类中,可以将一个对象作为另一个对象的属性进行调用和使用该对象中的方法和属性。
组和的目的是为了增加代码的重用性,大大降低代码的耦合性。
继承:一个类可以直接调用另一个类中的属性和方法
组合:一个类要想使用另一个类中的属性或者方法时,需要现在自己内部调用另一个类,指向自己内部的一个属性,然后通过调用该属性来调用另一个类的属性和方法。(一般情况下两个类没有太大的联系。)
原文:https://www.cnblogs.com/le-le666/p/11246910.html