制心一处,无事不办.

_#什么是继承?
#在面向对象中一个类继承了父类,就拥有了父类的所有成员(私有成员除外)

概念:
#父类:被其他类继承的类
#子类:继承其他类的类
#继承的意义
#提高代码的重用性,建立类之间的关系,方便其他操作
#继承的语法格式
‘’’
class 父类():
pass
class 子类(父类):
pass
‘’’_

继承的特征:
所有类都继承自object类
子类继承父类后,就拥有了父类中的所有成员包括魔术方法(除了私有成员)
子类继承父类后,并不会把父类的成员复制给子类,而是去引用
子类继承父类后可以重写父类的方法,叫做重写
子类重写父类的方法,依然可以使用super().父类方法名()的方式调用父类的方法
子类中如果定义了父类中不存在的方法,称为对父类的拓展

1.普通继承

#猫科动物
class maoke():
_#属性
_maose = ‘猫纹’
sex = **’m’

  1. **_# 方法<br /> _**def **zou(self):<br /> print(**'走猫步'**)

#定义猫类
class mao(maoke):
#子类可以有自己的方法
def chi(self):
print(‘我爱吃老鼠’)

h = mao()

print(h.maose)

h.zou()

2.多继承

一个类去继承多个类

#父亲类
class F():

  1. **def **eat(self):<br /> print(**'大口吃酒,大口喝肉'**)

#母亲类
class M():

  1. **def **eat(self):<br /> print(**'小吃一手'**)<br />_#孩子类<br />_**class **B(F,M):
  2. **def **eat(self):<br /> super().eat()_#多继承和多继承中父类方法的调用<br /> _print(**'哭就完事了'**)

b = B()
b.eat()

3.菱形继承

继承关系:D类继承了B类和C类,然后B类和C类又继承了A类

#祖先类
class Human():
num = 111
def eat(self):
print(‘爷爷我顿顿小烧烤’)

#父亲类
class F(Human):
num = 222
def eat(self):
super().eat()
print(‘大口吃酒,大口喝肉’)
print(super().num)

#母亲类
class M(Human):
num = 333
def eat(self):
super().eat()
print(‘小吃一手’)
print(super().num)

#孩子类
class B(F,M):
num = 444
def eat(self):
super().eat()_#多继承和多继承中父类方法的调用
_print(‘哭就完事了’)
print(super().num)

b = B()
b.eat()

4.类之间的继承关系

#MRO列表生成原则:
#1:子类永远在父类前面
#2:同一等级的类,按照子类的继承顺序摆放
#3:先子类后父类的顺序原则

#super()在调用时,并不是查找父类,而是去MRO列表上找上一个类
#super()方法在调用时,会自动把self传入到上一级的方法中

#类关系检测 issubclass() 检测一个类是否是另一个类的子类

class A():
**pass

class B(A):
pass

class C(A):
pass

class D(B,C):
pass

**print(D.mro())
#[, , , <class ‘_main.A’>, ]

res = issubclass(D,B) #检测D类是否是B类的子类
print(res) #True_