文章目錄
- 一、思維導圖
- 二、詳細內容
- 第 6 章:面向對象編程基礎
- 6.1 面向對象編程的概念和優勢
- 6.2 類和對象的定義與創建
- 6.3 類的屬性和方法
- 6.4 構造函數(__init__)和析構函數(__del__)
- 6.5 封裝、繼承和多態的實現
- 第 7 章:高級面向對象編程
- 7.1 類的特殊方法(如 __str__、__len__ 等)
- 7.2 類的靜態方法和類方法
- 7.3 抽象基類和抽象方法
- 7.4 多重繼承和方法解析順序(MRO)
- 三、總結
一、思維導圖
二、詳細內容
第 6 章:面向對象編程基礎
6.1 面向對象編程的概念和優勢
面向對象編程(Object-Oriented Programming,OOP)是一種編程范式,它將數據和操作數據的方法封裝在一起,形成對象。對象之間通過消息傳遞進行交互。
優勢:
- 可維護性:代碼結構清晰,易于理解和修改。
- 可擴展性:可以通過繼承和多態方便地擴展功能。
- 可重用性:可以復用已有的類和對象。
6.2 類和對象的定義與創建
在 Python 中,使用 class
關鍵字定義類,類是對象的藍圖,對象是類的實例。
# 定義一個簡單的類
class Person:pass# 創建對象
p1 = Person()
p2 = Person()
6.3 類的屬性和方法
類的屬性是類的特征,方法是類的行為。
class Person:# 類屬性species = "Homo sapiens"def __init__(self, name, age):# 實例屬性self.name = nameself.age = age# 實例方法def introduce(self):print(f"Hi, my name is {self.name} and I'm {self.age} years old.")p = Person("Alice", 25)
print(p.species) # 訪問類屬性
p.introduce() # 調用實例方法
6.4 構造函數(init)和析構函數(del)
- 構造函數:
__init__
方法在創建對象時自動調用,用于初始化對象的屬性。 - 析構函數:
__del__
方法在對象被銷毀時自動調用。
class Person:def __init__(self, name):self.name = nameprint(f"{self.name} is created.")def __del__(self):print(f"{self.name} is destroyed.")p = Person("Bob")
del p
6.5 封裝、繼承和多態的實現
- 封裝:將數據和操作數據的方法封裝在一起,隱藏對象的內部實現細節。
- 繼承:子類可以繼承父類的屬性和方法,從而實現代碼的復用。
- 多態:不同的對象可以對同一消息做出不同的響應。
# 封裝
class BankAccount:def __init__(self, balance):self.__balance = balance # 私有屬性def deposit(self, amount):self.__balance += amountdef get_balance(self):return self.__balance# 繼承
class SavingsAccount(BankAccount):def __init__(self, balance, interest_rate):super().__init__(balance)self.interest_rate = interest_ratedef calculate_interest(self):return self.get_balance() * self.interest_rate# 多態
class Animal:def speak(self):passclass Dog(Animal):def speak(self):print("Woof!")class Cat(Animal):def speak(self):print("Meow!")def make_animal_speak(animal):animal.speak()dog = Dog()
cat = Cat()
make_animal_speak(dog)
make_animal_speak(cat)
第 7 章:高級面向對象編程
7.1 類的特殊方法(如 str、len 等)
特殊方法以雙下劃線開頭和結尾,用于實現對象的特殊行為。
class Book:def __init__(self, title, author, pages):self.title = titleself.author = authorself.pages = pagesdef __str__(self):return f"{self.title} by {self.author}"def __len__(self):return self.pagesbook = Book("Python Crash Course", "Eric Matthes", 500)
print(book) # 調用 __str__ 方法
print(len(book)) # 調用 __len__ 方法
7.2 類的靜態方法和類方法
- 靜態方法:使用
@staticmethod
裝飾器定義,不需要實例化對象就可以調用,與類和實例無關。 - 類方法:使用
@classmethod
裝飾器定義,第一個參數是類本身,通常用于創建類的實例。
class MathUtils:@staticmethoddef add(a, b):return a + b@classmethoddef create_from_list(cls, numbers):return sum(numbers)print(MathUtils.add(2, 3)) # 調用靜態方法
print(MathUtils.create_from_list([1, 2, 3])) # 調用類方法
7.3 抽象基類和抽象方法
抽象基類是包含抽象方法的類,抽象方法是沒有實現的方法,子類必須實現這些抽象方法。
from abc import ABC, abstractmethodclass Shape(ABC):@abstractmethoddef area(self):passclass Circle(Shape):def __init__(self, radius):self.radius = radiusdef area(self):return 3.14 * self.radius ** 2circle = Circle(5)
print(circle.area())
7.4 多重繼承和方法解析順序(MRO)
多重繼承是指一個子類可以繼承多個父類的屬性和方法。方法解析順序(MRO)決定了在多重繼承中調用方法的順序。
class A:def method(self):print("A's method")class B:def method(self):print("B's method")class C(A, B):passc = C()
c.method() # 調用 A 的方法,因為 A 在 MRO 中排在前面
print(C.mro()) # 查看 MRO
三、總結
面向對象編程是一種強大的編程范式,它通過封裝、繼承和多態等特性,提高了代碼的可維護性、可擴展性和可重用性。在基礎部分,我們學習了類和對象的定義、屬性和方法的使用,以及構造函數和析構函數的作用。在高級部分,我們深入探討了類的特殊方法、靜態方法和類方法,以及抽象基類和多重繼承等概念。掌握這些知識,將有助于我們編寫更加高效、靈活和可維護的代碼。