Python中,類(Class)和對象(Object)是面向對象編程(OOP)的核心概念。通過類和對象,我們可以對現實世界中的事物進行建模,封裝其屬性(數據)和行為(方法),從而使代碼更具結構化、可重用性和可擴展性。
要定義一個類,我們使用class
關鍵字。類中可以包含屬性(變量)和方法(函數)。
Person
的類,有屬性name
和方法greet
。class Person:
# 初始化方法,用於初始化對象屬性
def __init__(self, name):
self.name = name
# 類的方法
def greet(self):
print(f"Hello, my name is {self.name}.")
__init__
方法__init__
方法是類的構造函數,在創建對象時自動調用,用於初始化對象的屬性。它有一個默認參數self
,表示對象本身。
def __init__(self, name):
self.name = name
self
參數self
是對象本身的引用,用於訪問類的屬性和方法。它必須作為類中所有方法的第一個參數,但在調用方法時不需要傳遞self
,Python會自動處理。
創建一個類的實例,稱為創建對象。我們通過調用類來創建對象,類似於函數調用。
Person
類的對象,並調用它的方法。# 創建對象
person1 = Person("Alice")
# 調用對象的方法
person1.greet() # 輸出: Hello, my name is Alice.
屬性是類或對象的變量,用於存儲數據。屬性可以在__init__
方法中初始化,也可以在類的其他方法中動態添加。
class Car:
def __init__(self, make, model):
self.make = make # 屬性
self.model = model # 屬性
car1 = Car("Toyota", "Corolla")
print(car1.make) # 輸出: Toyota
print(car1.model) # 輸出: Corolla
方法是定義在類中的函數,用來描述對象的行為。方法的第一個參數必須是self
。
class Dog:
def __init__(self, name):
self.name = name
def bark(self):
print(f"{self.name} is barking.")
dog1 = Dog("Rex")
dog1.bark() # 輸出: Rex is barking.
__init__
方法中。class Animal:
species = "Dog" # 類變量
def __init__(self, name):
self.name = name # 實例變量
animal1 = Animal("Buddy")
animal2 = Animal("Charlie")
print(animal1.species) # 輸出: Dog
print(animal2.species) # 輸出: Dog
Animal.species = "Cat"
print(animal1.species) # 輸出: Cat
print(animal2.species) # 輸出: Cat
類方法使用@classmethod
裝飾器標記,第一個參數是cls
,表示類本身。類方法可以訪問類變量,但不能訪問實例變量。
class MyClass:
count = 0
@classmethod
def increment_count(cls):
cls.count += 1
MyClass.increment_count()
print(MyClass.count) # 輸出: 1
靜態方法使用@staticmethod
裝飾器標記,它不需要傳入self
或cls
,不能訪問類屬性或實例屬性,常用於封裝一些邏輯功能。
class MathOperations:
@staticmethod
def add(x, y):
return x + y
result = MathOperations.add(5, 3)
print(result) # 輸出: 8
繼承是一個類(子類)繼承另一個類(父類)的屬性和方法的機制,從而實現代碼的重用。
# 父類
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
pass
# 子類,繼承父類
class Dog(Animal):
def speak(self):
return f"{self.name} says Woof!"
# 子類,繼承父類
class Cat(Animal):
def speak(self):
return f"{self.name} says Meow!"
dog = Dog("Rex")
cat = Cat("Whiskers")
print(dog.speak()) # 輸出: Rex says Woof!
print(cat.speak()) # 輸出: Whiskers says Meow!
多態性允許不同的子類對同一個方法有不同的實現,而不需要改變方法的調用方式。
for animal in [Dog("Rex"), Cat("Whiskers")]:
print(animal.speak()) # 根據實際對象調用相應的方法
# 輸出:
# Rex says Woof!
# Whiskers says Meow!
封裝是一種將數據和方法隱藏在類內部的技術,僅對外暴露必要的接口。通過 _ 和 __ 可以對屬性和方法進行隱藏。
class BankAccount:
def __init__(self, owner, balance):
self.owner = owner
self.__balance = balance # 私有屬性,外部無法直接訪問
def deposit(self, amount):
if amount > 0:
self.__balance += amount
def withdraw(self, amount):
if amount <= self.__balance:
self.__balance -= amount
def get_balance(self):
return self.__balance
account = BankAccount("John", 1000)
print(account.get_balance()) # 輸出: 1000
account.deposit(500)
print(account.get_balance()) # 輸出: 1500