# Python中的繼承和多態怎么用
## 目錄
- [1. 面向對象編程基礎](#1-面向對象編程基礎)
- [2. 繼承的概念與實現](#2-繼承的概念與實現)
- [2.1 單繼承](#21-單繼承)
- [2.2 多繼承](#22-多繼承)
- [2.3 方法重寫](#23-方法重寫)
- [3. 多態的原理與應用](#3-多態的原理與應用)
- [3.1 鴨子類型](#31-鴨子類型)
- [3.2 抽象基類](#32-抽象基類)
- [4. 實際應用案例](#4-實際應用案例)
- [5. 總結](#5-總結)
## 1. 面向對象編程基礎
面向對象編程(OOP)是Python的核心范式之一,主要包含三大特性:
- **封裝**:隱藏對象內部細節,通過方法暴露功能
- **繼承**:子類自動獲得父類特性
- **多態**:不同對象對同一消息做出不同響應
```python
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
raise NotImplementedError("子類必須實現此方法")
最基本的繼承形式,子類繼承單個父類的屬性和方法
class Dog(Animal):
def speak(self):
return f"{self.name}說:汪汪!"
class Cat(Animal):
def speak(self):
return f"{self.name}說:喵喵~"
# 使用示例
dog = Dog("阿黃")
print(dog.speak()) # 輸出:阿黃說:汪汪!
Python支持一個類繼承多個父類(注意菱形繼承問題)
class LandAnimal:
def walk(self):
print("在陸地上行走")
class WaterAnimal:
def swim(self):
print("在水中游泳")
class Frog(LandAnimal, WaterAnimal):
pass
# 使用示例
frog = Frog()
frog.walk() # 繼承自LandAnimal
frog.swim() # 繼承自WaterAnimal
子類可以覆蓋父類的方法實現
class Bird(Animal):
def speak(self):
# 調用父類方法并擴展
sound = super().speak()
return f"{sound}(同時拍打翅膀)"
Python的多態基于”鴨子類型”(Duck Typing):
“如果它走起來像鴨子,叫起來像鴨子,那么它就是鴨子”
def animal_sound(animal):
print(animal.speak())
# 不同對象調用相同接口
animal_sound(Dog("旺財")) # 輸出狗叫
animal_sound(Cat("咪咪")) # 輸出貓叫
通過abc模塊實現嚴格的接口約束
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
pass
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius ** 2
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
def total_area(shapes):
return sum(shape.area() for shape in shapes)
# 使用不同子類
shapes = [Circle(5), Rectangle(4, 6)]
print(total_area(shapes)) # 輸出:78.5 + 24 = 102.5
class Payment(ABC):
@abstractmethod
def pay(self, amount):
pass
class Alipay(Payment):
def pay(self, amount):
print(f"支付寶支付{amount}元")
class WechatPay(Payment):
def pay(self, amount):
print(f"微信支付{amount}元")
def process_payment(payment_method, amount):
payment_method.pay(amount)
super()謹慎處理初始化順序@property等裝飾器增強封裝性# 最終示例:綜合運用繼承和多態
class Employee:
def __init__(self, name):
self.name = name
def calculate_salary(self):
raise NotImplementedError
class FullTimeEmployee(Employee):
def calculate_salary(self):
return 10000
class PartTimeEmployee(Employee):
def __init__(self, name, hours):
super().__init__(name)
self.hours = hours
def calculate_salary(self):
return self.hours * 100
# 多態處理
employees = [
FullTimeEmployee("張三"),
PartTimeEmployee("李四", 60)
]
for emp in employees:
print(f"{emp.name}的工資:{emp.calculate_salary()}")
通過合理運用繼承和多態,可以構建出靈活、易擴展的Python應用程序。關鍵在于理解”抽象”與”具體”的關系,以及如何通過統一的接口操作不同的對象實現。 “`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。