Python的多態性(Polymorphism)是物件導向程式設計中的關鍵概念,允許不同類型的物件使用相同的介面(方法),從而增強程式碼的靈活性和可擴展性。物件表現出不同的行為,即使它們使用相同的方法名稱。
在Python中,多態性表達在不同類別的物件可以透過相同的方法名稱來實現不同的功能。
class Dog:
def speak(self):
return "Woof!"
class Cat:
def speak(self):
return "Meow!"
# 定義一個通用的函數,無論傳入的是哪種動物,都可以調用它的 speak 方法
def make_animal_speak(animal):
print(animal.speak())
dog = Dog()
cat = Cat()
make_animal_speak(dog) # 輸出: Woof!
make_animal_speak(cat) # 輸出: Meow!
在這個例子中,Dog
和Cat
類別都有一個名為speak
的方法,當我們呼叫make_animal_speak()
時,Python根據確定的物件類型,自動選擇正確的speak
方法。
多態性通常與繼承結合使用。
class Animal:
def speak(self):
raise NotImplementedError("Subclasses must implement this method")
class Dog(Animal):
def speak(self):
return "Woof!"
class Cat(Animal):
def speak(self):
return "Meow!"
animals = [Dog(), Cat()]
for animal in animals:
print(animal.speak())
在這個例子中,類別是一個父類,它Animal
定義了一個抽象方法speak
。Dog``Cat``speak``animals``speak
Python的函數和方法本質上是動態類型的,這意味著我們可以將不同類型的物件傳遞給同一個函數或方法,而Python會自動選擇合適的行為。
class Bird:
def fly(self):
return "Bird is flying"
class Airplane:
def fly(self):
return "Airplane is flying"
class Rocket:
def fly(self):
return "Rocket is launching"
# 通過一個通用的函數來調用 fly 方法
def fly_anything(flying_object):
print(flying_object.fly())
bird = Bird()
airplane = Airplane()
rocket = Rocket()
fly_anything(bird) # 輸出: Bird is flying
fly_anything(airplane) # 輸出: Airplane is flying
fly_anything(rocket) # 輸出: Rocket is launching
在這個例子中,無論是鳥、飛機或火箭,它們都可以透過同一個fly方法來實現不同的行為。
Python中的許多內建函數也是多態的,它們可以接受不同類型的物件len()
。
print(len("Hello")) # 輸出: 5
print(len([1, 2, 3])) # 輸出: 3
print(len({"a": 1, "b": 2})) # 輸出: 2
if-else
或switch-case
判斷邏輯,簡化程式碼結構。