【一】什么是继承
- 新建的类可以继承一个或多个父类,
- 子类有所有父类有点数据属性和函数属性
- python中继承被分为单继承和多继承
【二】单继承和多继承
# 定义父类
class Human:
...
# 定义父类
class Asia:
...
# 单继承
class Chinese(Human):
...
# 多继承
class Shanghai(Human, Asia):
...
【三】查看继承
class Human:
...
# 定义父类
class Asia:
...
# 单继承
class Chinese(Human):
...
# 多继承
class Shanghai(Asia, Human):
...
# __base__只查看从左到右继承的第一个子类,
# __bases__则是查看所有继承的父类
print(Shanghai.__base__) # <class '__main__.Asia'>
print(Shanghai.__bases__) # (<class '__main__.Asia'>, <class '__main__.Human'>)
【四】经典类和新式类
-
只有在python2中才分新式类和经典类
-
在python2中,没有显示的继承object类的类,以及该类的子类,都是经典类
-
在python2中,显示的声名继承object的类,以及该类的子类才是新式类
-
在python3中,无论是否继承object,都默认继承object,即python3中所有类均为新式类
-
如果没有指定基类,python的类会默认继承object类,object是所有python类的基类,它提供了一些常见方法(如__str__)的实现。
class Human:
...
print(Human.__bases__) # (<class 'object'>,)
【五】继承与抽象(先抽象再继承)
- 对于生活而言都是有了各种实例才会抽象出类,比如有很多人,所以我们是人类,有很多狗,它们都属于狗类。
- 但是对于程序而言,是要先抽象出来一个类,才能继承它的属性
【六】继承与重用性
【1】单独成类
- 不管是哪国人都会可以会 唱 跳 rap 篮球
class Chinese(Human):
def sing(self):
...
def jump(self):
...
def rap(self):
...
def basketball(self):
...
class Korean(Human):
def sing(self):
...
def jump(self):
...
def rap(self):
...
def basketball(self):
...
class Japanese(Human):
def sing(self):
...
def jump(self):
...
def rap(self):
...
def basketball(self):
...
【2】继承总类
- 上面可以看出哪国人都会可以会 唱 跳 rap 篮球
- 而我们却重复了好几遍代码,出现了代码冗余
- 如果使用继承的思想
- 人类:唱 跳 rap 篮球
- 中国人 说中国话 (人类的功能)
- 韩国人 说韩国话 (人类的功能)
- 日本人 说日本话 (人类的功能)
【3】代码实现
class Human:
def __init__(self, name):
self.name = name
def sing(self):
print(f'{self.name}会唱歌')
def jump(self):
print(f'{self.name}会跳舞')
def rap(self):
print(f'{self.name}会rap')
def basketball(self):
print(f'{self.name}会打篮球')
class Chinese(Human):
...
class Korean(Human):
...
class Japanese(Human):
...
chinese_1 = Chinese(name='IKUN')
chinese_1.jump()
标签:...,继承,self,面向对象,Human,class,def
From: https://www.cnblogs.com/Hqqqq/p/17963198