继承:即一个派生类(derived class)继承基类(base class)的字段和方法,简单点就是子承父业,子类可以使用父类的几乎所有的属性和方法。
语法:class 子类方法(父类方法):
#父类
class Mobile:
# 类属性:所有成员的共同特征
can_call = True
def call(self):
print('某部手机正在打电话')
#子类
class SmartPhone(Mobile):
pass
# 父类的所有的属性和方法,子类都可以用
xiaomi = SmartPhone()
xiaomi.call()
运行结果:
D:\Python3.7\python.exe D:/PycharmProjects/Py44/test.py
某部手机正在打电话Process finished with exit code 0
重写:重写父类的方法
class Mobile:
# 类属性:所有成员的共同特征
can_call = True
def call(self):
print('普通手机正在打电话')
class SmartPhone(Mobile):
def call(self):
print('智能手机正在打电话')
# 父类的所有的属性和方法,子类都可以用
xiaomi = SmartPhone()
xiaomi.call()
运行结果:
D:\Python3.7\python.exe D:/PycharmProjects/Py44/test.py
智能手机正在打电话Process finished with exit code 0
当自己有对应的方法或者属性时,优先使用自己的方法或属性;如果自己没有,往上一层一层找(父类,爷爷类......等)
class Mobile:
# 类属性:所有成员的共同特征
can_call = True
def call(self):
print('普通手机正在打电话')
class SmartPhone(Mobile):
def call(self):
print('智能手机正在打电话')
class Ipone(SmartPhone):
pass
xiaomi = SmartPhone()
xiaomi.call()
ipone7 = Ipone()
ipone7.call()
运行结果:
D:\Python3.7\python.exe D:/PycharmProjects/Py44/test.py 智能手机正在打电话 智能手机正在打电话 Process finished with exit code 0
多重继承:当一个子类有多个父类时,
语法:class 子类方法(父1方法,父2方法,.....)
class Mobile:
# 类属性:所有成员的共同特征
can_call = True
def call(self):
print('普通手机正在打电话')
class SmartPhone(Mobile):
def call(self):
print('智能手机正在打电话')
class MusicPlayer:
def play_music(self):
print('正在播放音乐')
class Ipone(SmartPhone, MusicPlayer):
pass
xiaomi = SmartPhone()
xiaomi.call()
ipone7 = Ipone()
ipone7.call()
ipone7.play_music()
运行结果:
D:\Python3.7\python.exe D:/PycharmProjects/Py44/test.py
智能手机正在打电话
智能手机正在打电话
正在播放音乐Process finished with exit code 0
超继承:先继承父类的属性或方法,再自己去创建新的属性或方法。
语法:super().父类方法()
class Mobile:
# 类属性:所有成员的共同特征
can_call = True
def call(self):
print('普通手机正在打电话')
class SmartPhone(Mobile):
def call(self):
#使用父类的call方法
super().call()
print('智能手机正在打电话')
xiaomi = SmartPhone()
# 选择1:重写,子类中重新定义call方法
# xiaomi.call()
# 选择2:继承,去掉子类的call方法
# xiaomi.call()
# 选择3:超继承,不但要继承父类的call方法,也有自己的个性要定义
xiaomi.call()
运行结果:
D:\Python3.7\python.exe D:/PycharmProjects/Py44/test.py
普通手机正在打电话
智能手机正在打电话Process finished with exit code 0
总结:
1.继承:直接拿父类的属性或方法来用
2.重写:使用跟父类相同的方法名,但会重新定义方法体
3.超继承:super().父类方法(),继承+重写