5.1. 基本语法
概念:是指一个类,可以继承另一个类的属性和方法。
作用:可以实现代码的复用与扩展,避免重复编写相同的代码,让程序结构更简洁、更高效。
举例:就像生活中,孩子可以继承父母的:长相、性格、财产等,程序中的继承与之类似。
代码实例:
如下代码中Person为父类(又称:基类)Student为子类(又称:派生类)
# 定义一个Person类
class Person:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def speak(self, msg):
print(f'我叫{self.name}, 年龄是{self.age}, 性别是{self.gender},我想说:{msg}')
# 定义一个Student类(子类、派生类), 继承自Person类(父类、超类、基类)
class Student(Person):
def __init__(self, name, age, gender, stu_id, grade):
# 在子类中,有两种方式去调用父类的初始化方法,来实现对继承属性:name, age, gender 初始化操作
# 方式1(更推荐)
super().__init__(name, age, gender)
# 方式2
# Person.__init__(self, name, age, gender)
# 子类独有的属性,需要自己手动完成初始化
self.stu_id = stu_id
self.grade = grade
def study(self):
print(f'我叫{self.name},我在努力的学习,争取做到{self.grade}年级的第一名')
# 创建Student类的实例对象
s1 = Student('李华', 16, '男', '2025001', '初二')
# print(s1.__dict__)
# print(type(s1))
# 查找speak方法的过程:1.实例自身(s1) => 2.Student类 => 3.Person类
# s1.speak('你好')
# print(s1.__dict__)
# 查找study方法的过程:1.实例自身(s1) => 2.Student类 => 3.Person类
# s1.study()
几个说明:
- 定义类时,在类名后写圆括号(),并填入另一个类名,表示该类继承自另一个类。
- 在子类中,可以直接使用父类中定义的:属性、方法,也可以定义自己独有的内容。
- super().__init__()的作用:调用父类的初始化方法。
5.2. 方法重写
如果子类中定义了与父类同名的方法,则会子类会“覆盖”父类中的方法,又称:“重写”。
# 定义一个Person类
class Person:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def speak(self, msg):
print(f'我叫{self.name}, 年龄是{self.age}, 性别是{self.gender},我想说:{msg}')
# 定义一个Student类,继承自Person类
class Student(Person):
def __init__(self, name, age, gender, stu_id, grade):
super().__init__(name, age, gender)
self.stu_id = stu_id
self.grade = grade
# 方法重写:当子类中定义了一个与父类中相同的方法,那么子类中的方法就会“覆盖”父类的方法
def speak(self, msg):
super().speak(msg)
print(f'我是学生,我的学号是{self.stu_id},我正在读{self.grade},我想说:{msg}')
s1 = Student('李华', 12, '男', '2025001', '初二')
s1.speak('好好学习')
5.3. isinstance() 和 issubclass()
两个常用方法:
| 函数 | 作用 |
| isinstance(obj, Class) | 判断对象是否为指定类或其子类的实例 |
| issubclass(Sub, Super) | 判断一个类是否是另一个类的子类 |
# 定义一个Person类
class Person:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
# 定义一个Student类,继承自Person类
class Student(Person):
def __init__(self, name, age, gender, stu_id, grade):
super().__init__(name, age, gender)
self.stu_id = stu_id
self.grade = grade
p1 = Person('张三', 18, '男')
s1 = Student('李华', 12, '男', '2025001', '初二')
# 方法1:isinstance(instance, Class),作用:判断某个对象是否为指定类或其子类的实例
print(isinstance(s1, Student))
print(isinstance(p1, Person))
print(isinstance(s1, Person))
print(isinstance(p1, Student))
# 方法2:issubclass(Class1, Class2),作用:判断某个类是否是另一个类的子类
print(issubclass(Student, Person))
print(issubclass(Person, Student))
5.4. 多重继承
概念:多重继承指一个类同时继承多个父类,从而拥有多个父类的属性和方法。
举例:就像孩子不仅继承爸爸的长相,还可能继承妈妈的性格。
class 子类名(父类A, 父类B, ...):
# 子类可以继承多个父类的属性和方法
...
代码示例:如下代码中Student类同时继承Person类和Worker类。
# 所谓多重继承,就是一个类,可以同时继承多个父类
# 定义一个Person类
class Person:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def speak(self):
print(f'我叫{self.name}, 年龄是{self.age}, 性别是{self.gender}')
# 定义一个Worker类
class Worker:
def __init__(self, company):
self.company = company
def do_work(self):
print(f'我在{self.company}做兼职')
# 定义一个Student类,继承自:Person类、Worker类
class Student(Person, Worker):
def __init__(self, name, age, gender, stu_id, grade, company):
Person.__init__(self, name, age, gender)
Worker.__init__(self, company)
self.stu_id = stu_id
self.grade = grade
def study(self):
print(f'我在很努力的学习,争取做{self.grade}年级的第一名')
# 创建Student实例对象
s1 = Student('张三', 18, '男', '2025001', '初二', '麦当劳')
print(s1.__dict__)
s1.speak()
s1.do_work()
s1.study()
# 类的__mro__属性:用于记录属性和方法的查找顺序
# 通过实例去查找属性或方法时,会现在实例自身上寻找,如果没有,就按照__mro__中所记录的顺序去查找
print(Student.__mro__)
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END












请登录后查看评论内容