python中的多态和鸭子类型

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方法,这就是鸭子类型。即:它不关注对象的类型,而是关注对象的具体行为(方法)。

参考文章:【Python】浅谈 鸭子类型 (Duck Typing)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值