我已經經歷了許多鏈接,但是使用python理解多態的最簡單方法是什麼?有沒有任何簡單的例子。從我的理解中,多態是一個概念,一個對象可以採用多個表單。 。可任何一個讓我知道的任何簡單的例子,而不是複雜python多態概念示例
http://swaroopch.com/notes/python_en-object_oriented_programming/
http://www.tutorialspoint.com/python/python_classes_objects.htm
我已經經歷了許多鏈接,但是使用python理解多態的最簡單方法是什麼?有沒有任何簡單的例子。從我的理解中,多態是一個概念,一個對象可以採用多個表單。 。可任何一個讓我知道的任何簡單的例子,而不是複雜python多態概念示例
http://swaroopch.com/notes/python_en-object_oriented_programming/
http://www.tutorialspoint.com/python/python_classes_objects.htm
這看起來像一個很好的和簡單的例子:
http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming#Example
例來自維基百科的文章複製:
class Animal:
def __init__(self, name): # Constructor of the class
self.name = name
def talk(self): # Abstract method, defined by convention only
raise NotImplementedError("Subclass must implement abstract method")
class Cat(Animal):
def talk(self):
return 'Meow!'
class Dog(Animal):
def talk(self):
return 'Woof! Woof!'
animals = [Cat('Missy'),
Dog('Lassie')]
for animal in animals:
print(animal.name + ': ' + animal.talk())
# prints the following:
# Missy: Meow!
# Lassie: Woof! Woof!
BTW Python使用鴨打字實現多態,如果您想了解更多搜索這句話。
靜態語言主要依賴繼承作爲實現多態的工具。 動態語言另一方面取決於鴨子打字。 Duck typing支持多態而不使用繼承。在這種情況下,您需要在每個擴展類中實現相同的一組相關方法。
維基百科鴨打字頁
class Duck:
def quack(self):
print("Quaaaaaack!")
def feathers(self):
print("The duck has white and gray feathers.")
class Person:
def quack(self):
print("The person imitates a duck.")
def feathers(self):
print("The person takes a feather from the ground and shows it.")
def name(self):
print("John Smith")
def in_the_forest(duck):
duck.quack()
duck.feathers()
def game():
donald = Duck()
john = Person()
in_the_forest(donald)
in_the_forest(john)
game()
儘量想與那些有相同的協議之間的協議(一組的方法)和互換性對象。
duck typing definition從python.org:
一種編程風格,不看對象的類型,以 確定它是否有合適的接口;相反,該方法或 屬性只是簡單地調用或使用(「如果它看起來像一隻鴨子,像一隻鴨子,它肯定是一隻鴨子。」)通過強調接口 而不是特定類型,精心設計的代碼改進了它的通過允許多態性替換來實現靈活性。使用type()或isinstance(),鴨式打樣可避免 測試。 (但是,請注意,鴨子打字 可以補充抽象基類。)相反,它通常使用hasattr()測試或EAFP編程。