三大特征
继承
继承方法
class 父类:
def 父类方法(self):
方法体
class 子类(父类):
def 子类方法(self):
方法体
儿子 = 子类()
儿子.子类方法()
儿子.父类方法()
子类直接拥有父类的方法
class Person:
def say(self):
print("说话")
class Teacher(Person):
def teach(self):
self.say()
print("教学")
class Student(Person):
def study(self):
self.say()
print("学习")
qtx = Teacher()
qtx.say()
qtx.teach()
xm = Student()
xm.say()
xm.study()
内置函数
- isinstance(对象,类型) : 返回指定对象是否是某个类的对象
- issubclass(类型,类型) : 返回指定类型是否属于某个类型
# 对象 是一种 类型: isinstance(对象,类型)
# 老师对象 是一种 老师类型
print(isinstance(qtx, Teacher)) # True
# 老师对象 是一种 人类型
print(isinstance(qtx, Person)) # True
# 老师对象 是一种 学生类型
print(isinstance(qtx, Student)) # False
# 人对象 是一种 学生类型
print(isinstance(p, Student)) # False
# 类型 是一种 类型: issubclass(类型,类型)
# 老师类型 是一种 老师类型
print(issubclass(Teacher, Teacher)) # True
# 老师类型 是一种 人类型
print(issubclass(Teacher, Person)) # True
# 老师类型 是一种 学生类型
print(issubclass(Teacher, Student)) # False
# 人类型 是一种 学生类型
print(issubclass(Person, Student)) # False
# 是的关系
# 老师对象的类型 是 老师类型
print(type(qtx) == Teacher) # True
# 老师对象的类型 是 人类型
print(type(qtx) == Person) # False
继承数据
子类如果没有构造函数,将自动执行父类的,但如果有构造函数将覆盖父类的。此时必须通过
super()
函数调用父类的构造函数,以确保父类实例变量被正常创建
class 子类(父类):
def __init__(self,父类参数,子类参数):
super().__init__(参数) # 调用父类构造函数
self.实例变量 = 参数
演示
class Person:
def __init__(self, name="", age=0):
self.name = name
self.age = age
# 子类有构造函数,不会使用继承而来的父类构造函数[子覆盖了父方法,好像它不存在]
class Student(Person):
# 子类构造函数:父类构造函数参数,子类构造函数参数
def __init__(self, name, age, score):
# 调用父类构造函数
super().__init__(name, age)
self.score = score
ts = Person("唐僧",22)
print(ts.name)
kw = Student("悟空", 23, 100)
print(wk.name)
print(wk.score)
定义
- 概念: 重用现有类的功能,并在此基础上进行扩展
- 说明:子类直接具有父类的成员(共性),还可以扩展新功能
相关知识
- 父类(基类、超类)、子类(派生类)
- 父类相对于子类更抽象,范围更宽泛;子类相对于父类更具体,范围更狭小
- 单继承:父类只有一个(例如 Java,C#)
- 多继承:父类有多个(例如C++,Python)
- Object类:任何类都直接或间接继承自 object 类
多继承
一个子类继承两个或两个以上的基类,父类中的属性和方法同时被子类继承下来
- 同名方法解析顺序(MRO, Method Resolution Order),类自身 --> 父类继承列表(由左至右)--> 再上层父类
A
/ \
/ \
B C
\ /
\ /
\ /
D
最后一次更新于2022-10-20 09:13
0 条评论