Python - 類別與物件

你好,有抱負的 Python 程式設計師!今天,我們將進入 Python 中面向物件程式設計(OOP)的精彩世界。系好安全帶,因為我們即將改變你對代碼的思考方式!

Python - Classes & Objects

Python 中的類別是什麼?

想象一下你在建立一個虛擬動物園。你不會從頭開始創建每種動物,對吧?這就是類別派上用場的地方!

Python 中的類別就像創建物件的藍圖或模板。它定義了一組屬性和方法,該類別的物件將具有這些屬性和方法。

讓我們創建一個簡單的類別來表示一條狗:

class Dog:
def __init__(self, name, breed):
self.name = name
self.breed = breed

def bark(self):
print(f"{self.name} 說 Woof!")

在這個例子中,Dog 是我們的類別。它有 namebreed 等屬性,以及一個名為 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