网上源自 Python 的定义
鸭子类型的核心概念在于一个对象的有效语义,不是继承自特定的类或者实现特定的方法,而是
由当前的属性和方法集合决定的。听起来依旧很迷茫,简单的说:
“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”
在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的。
个人理解
不同类拥有需要的必须的属性和方法, 那么认为是相同的鸭子~
情境是酱紫滴:
假设一场战斗中有怪物,玩家,还有盗贼,
三种人物均可以移动, 但是只有怪物和玩家可以攻击, 只有玩家和盗贼可以拾取掉落物品
class Monster:
def move(self):
# do monster move
def attack(self):
# do monster attack
class Player:
def move(self):
# do player move
def attack(self):
# do palyer attack
def collect(self):
# do player collect
class Thief:
def move(self):
# do thief move
def collect(self):
# do thief collect
那么现在
鸭子模型1:
def battle(duck):
duck.move()
duck.attack()
鸭子模型2:
def collect(duck):
duck.move()
duck.collect()
鸭子模型 1 是囊括 Monster 和 Player 的 A 类鸭子, 鸭子模型 2 是囊括 Player 和 Thief 的 B 类鸭子.
这样的话就容易理解上面晦涩的定义了.
重定义
鸭子模型不是建立在传统的集成思路, 而是基于组件的思想, 拥有固定的组件(属性/方法), 那么就称之为鸭子.