1. 多态
多态指的是一类事物具有多种形态,例如动物有猫、狗、鸡等形态。多态一般是通过继承和方法重写来实现,多个子类继承同一个父类,在这些子类中重写父类的方法,实现不同的功能,如下面代码所示:
class Animal():
def speak(self):
print("动物发音")
class Dog(Animal):
def speak(self):
print("汪汪汪...")
class Cat(Animal):
def speak(self):
print("喵喵喵...")
class Hen(Animal):
def speak(self):
print("咯咯咯...")
# python 中一切皆为对象,本身就支持多态
def fun(obj):
obj.speak()
dog = Dog()
cat = Cat()
hen = Hen()
fun(dog)
fun(cat)
fun(hen)
输出:
汪汪汪...
喵喵喵...
咯咯咯...
参考文章:【Python】面向对象 - 多态 ( 多态概念 | 多态用法 | 抽象类概念 | 代码示例 )
2. 鸭子类型
鸭子类型(duck typing)是一种动态类型的编程风格。事实上,duck typing 的概念源于一个米国诗人的诗句:当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。换而言之,鸭子类型它不关注对象的类型,而是关注对象的具体行为(方法)。例子:
class Duck:
def speak(self):
print("鸭子叫...")
class Dog:
def speak(self):
print("狗叫...")
class Cat:
def speak(self):
print("猫叫...")
def fun(obj):
obj.speak()
duck = Duck()
fun(duck) # 鸭子叫...
dog = Dog()
fun(dog) # 狗叫...
cat = Cat()
fun(cat) # 猫叫...
由上面的代码可知:只要对象中有speak()
方法,不管该对象是什么类型,都可以传入fun()
函数中来调用speak
方法,这就是鸭子类型。即:它不关注对象的类型,而是关注对象的具体行为(方法)。