Duck typing

Duck typing:是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定。在 Duck typing中,关注的不是对象的类型本身,而是它是如何使用的。

Duck typingPython中被广泛使用。下面是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 in_the_forest(duck):
    try:
        duck.quack()
        duck.feathers()
    except(AttributeError, TypeError):
        print("{} can't quack() or feathers()".format(duck))
 
def game():
    donald = Duck()
    john = Person()
    in_the_forest(donald)
    in_the_forest(john)
    in_the_forest("nelson")
 
if __name__ == '__main__':
    game()

 Duck typing在不使用继承的情况下使用了多态,具有强可伸缩性。

如果调用的方法不存在,那么将引发一个运行时错误。通常倾向于用异常处理来处理。异常可以简单地添加到包裹它的代码,并不需要影响更多的代码的逻辑从而避开复杂的检测和错误检查逻辑。

Duck typing常常被引用的一个批评是它要求程序员在任何时候都必须很好地理解他/她正在编写的代码。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值