Python - 類別與物件
你好,有抱負的 Python 程式設計師!今天,我們將進入 Python 中面向物件程式設計(OOP)的精彩世界。系好安全帶,因為我們即將改變你對代碼的思考方式!
Python 中的類別是什麼?
想象一下你在建立一個虛擬動物園。你不會從頭開始創建每種動物,對吧?這就是類別派上用場的地方!
Python 中的類別就像創建物件的藍圖或模板。它定義了一組屬性和方法,該類別的物件將具有這些屬性和方法。
讓我們創建一個簡單的類別來表示一條狗:
class Dog:
def __init__(self, name, breed):
self.name = name
self.breed = breed
def bark(self):
print(f"{self.name} 說 Woof!")
在這個例子中,Dog
是我們的類別。它有 name
和 breed
等屬性,以及一個名為 bark()
的方法。
在 Python 中創建類別
創建類別就像使用 class
關鍵字後跟類別名稱一樣簡單。讓我們創建一個更詳細的 Car
類別:
class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer = 0
def drive(self, distance):
self.odometer += distance
print(f"行駛了 {distance} 英里。總計:{self.odometer} 英里")
def honk(self):
print("嗶嗶!")
在這裡,__init__
是一個特殊的稱為構造函數的方法。當我們創建此類的新物件時,會調用它。
物件是什麼?
如果類別是藍圖,那麼物件就是從那個藍圖創建的實際“東西”。它是類別的一個特定實例。
在 Python 中創建類別的物件
創建物件(也稱為實例化)就像使用我們的藍圖創造真實的東西。讓我們創建一些車輛:
my_car = Car("Toyota", "Corolla", 2020)
your_car = Car("Honda", "Civic", 2019)
print(my_car.make) # 輸出:Toyota
your_car.drive(50) # 輸出:行駛了 50 英里。總計:50 英里
my_car.honk() # 輸出:嗶嗶!
每輛車都是一個獨立的物件,具有自己的屬性和方法集。
在 Python 中訪問物件的屬性
我們可以使用點表示法訪問物件的屬性。讓我們檢查一下我們的車:
print(f"我的車是 {my_car.year} {my_car.make} {my_car.model}")
# 輸出:我的車是 2020 Toyota Corolla
Python 類別的內置屬性
Python 類別附帶一些內置屬性。讓我們探索它們:
class MyClass:
x = 5
print(MyClass.__name__) # 輸出:MyClass
print(MyClass.__module__) # 輸出:__main__
print(MyClass.__dict__) # 輸出:{'__module__': '__main__', 'x': 5, ...}
Python 數據類型的內置類別
你知道即使是基本的 Python 類型也是物件嗎?讓我們看看:
print(type(5)) # 輸出:<class 'int'>
print(type("Hello")) # 輸出:<class 'str'>
print(type([1, 2, 3])) # 輸出:<class 'list'>
Python 中的一切都是物件!
Python 中的垃圾回收(銷毀物件)
在 Python 中,我們不需要手動銷毀物件。當物件不再使用時,Python 的垃圾回收器會自動處理。
import gc
# 創建一個物件
my_car = Car("Toyota", "Corolla", 2020)
# 刪除參考
my_car = None
# 強制垃圾回收(通常不需要)
gc.collect()
Python 中的數據隱藏
在 OOP 中,我們經常希望控制對某些屬性的訪問。Python 使用以底線開頭的屬性約定:
class BankAccount:
def __init__(self, balance):
self._balance = balance # 受保護的屬性
self.__secret = "shh" # 私有屬性
def deposit(self, amount):
self._balance += amount
def get_balance(self):
return self._balance
account = BankAccount(1000)
print(account._balance) # 輸出:1000(但我們不應該這麼做!)
print(account.__secret) # 這將引發 AttributeError
以下是我们涵盖的方法的汇总表:
方法 | 描述 |
---|---|
__init__(self, ...) |
构造函数方法,在创建新对象时调用 |
__str__(self) |
返回对象的字符串表示 |
__repr__(self) |
返回对象的详细字符串表示 |
__len__(self) |
定义内置 len() 函数的行为 |
__getitem__(self, key) |
定义索引操作的行为 |
__setitem__(self, key, value) |
定义分配给索引值的行为 |
就是這樣!你剛剛走進了 Python 中面向物件程式設計的世界。記住,孰能生巧。嘗試創建自己的類別和物件,很快你就能像專業人士一樣構建複雜、高效的程序!
Credits: Image by storyset