Python 进阶 - 第十四节
📋 本节要点
| 知识点 | 说明 |
|---|---|
| 封装 | 将数据和行为打包在类内部 |
| 继承 | 子类继承父类的属性和方法 |
super() |
调用父类的方法 |
| 方法重写 | 子类覆盖父类的方法 |
| 多态 | 不同对象调用相同方法有不同结果 |
| 多继承 | 一个类继承多个父类 |
0. 三大特性概述
面向对象编程(OOP)有三大特性:封装、继承、多态。封装已在前一节介绍,本节重点学习继承和多态。
1. 继承
继承允许子类自动拥有父类的属性和方法,实现代码复用,无需重复编写相同逻辑。
class 父类:
# 属性和方法
...
class 子类(父类):
# 继承父类,可以添加自己的属性和方法
...
1.1 基本继承
class Animal:
def __init__(self, name):
self.name = name
def eat(self):
print(f"{self.name} 正在吃东西")
def sleep(self):
print(f"{self.name} 正在睡觉")
# Cat 继承 Animal(直接继承,不添加新内容)
class Cat(Animal):
pass
cat = Cat("咪咪")
print(cat.name) # 咪咪(继承的属性)
cat.eat() # 咪咪 正在吃东西(继承的方法)
cat.sleep() # 咪咪 正在睡觉(继承的方法)
# Dog 继承 Animal(扩展功能,添加新方法)
class Dog(Animal):
def bark(self):
print(f"{self.name} 汪汪叫")
dog = Dog("旺财")
dog.eat() # 继承自 Animal
dog.sleep() # 继承自 Animal
dog.bark() # 子类自己的方法
2. 方法重写
方法重写是指子类可以覆盖父类中已有的方法,改变其行为。
class Animal:
def sound(self):
print("动物发出声音")
class Dog(Animal):
def sound(self): # 重写父类的方法
print("汪汪叫")
class Cat(Animal):
def sound(self): # 重写父类的方法
print("喵喵叫")
dog = Dog()
cat = Cat()
dog.sound() # 汪汪叫
cat.sound() # 喵喵叫
3. super() 调用父类方法
super() 用于在子类中调用父类的方法,常用于在子类的 __init__ 中复用父类的初始化逻辑。
class Animal:
def __init__(self, name):
self.name = name
def eat(self):
print(f"{self.name} 正在吃东西")
class Dog(Animal):
def __init__(self, name, breed):
super().__init__(name) # 调用父类的 __init__
self.breed = breed # 添加子类自己的属性
def bark(self):
print(f"{self.name} 汪汪叫")
dog = Dog("旺财", "哈士奇")
print(dog.name, dog.breed) # 旺财 哈士奇
dog.eat() # 旺财 正在吃东西
dog.bark() # 旺财 汪汪叫
4. 多态
多态指不同对象对同一消息(方法调用)做出不同的响应。多态的实现前提是继承和方法重写。
class Animal:
def speak(self):
pass
class Dog(Animal):
def speak(self):
print("汪汪汪")
class Cat(Animal):
def speak(self):
print("喵喵喵")
class Duck(Animal):
def speak(self):
print("嘎嘎嘎")
# 多态:统一调用,不同的结果
def make_speak(animal):
animal.speak()
make_speak(Dog()) # 汪汪汪
make_speak(Cat()) # 喵喵喵
make_speak(Duck()) # 嘎嘎嘎
多态的实际意义:可以不对
make_speak()函数进行修改,增加新的 Animal 子类后就能直接运行,体现了开闭原则(对扩展开放,对修改关闭)。
5. 多继承
一个类可以继承多个父类,获得所有父类的功能。
class Flyable:
def fly(self):
print("可以飞")
class Swimming:
def swim(self):
print("可以游泳")
class Duck(Flyable, Swimming):
def speak(self):
print("嘎嘎嘎")
duck = Duck()
duck.speak() # 嘎嘎嘎
duck.fly() # 可以飞
duck.swim() # 可以游泳
三大特性总结:
① 封装:将数据和行为打包在类内部,隐藏实现细节
② 继承:子类继承父类的属性和方法,实现代码复用
③ 多态:不同对象对同一方法有不同的实现,提高代码灵活性
下一节预告:访问限制
评论区
0 条暂时还没有评论,欢迎来抢沙发。