`
nelson_tu
  • 浏览: 38743 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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常常被引用的一个批评是它要求程序员在任何时候都必须很好地理解他/她正在编写的代码。

 

分享到:
评论

相关推荐

    详解duck typing鸭子类型程序设计与Python的实现示例

    鸭子类型(Duck Typing)是一种编程哲学,主要应用于动态类型语言,如Python,它强调对象的行为而非其具体的类型。在鸭子类型中,如果一个对象提供了与某个任务相符的方法,那么它就适合用于那个任务,而不必是特定...

    duck project

    在面向对象编程中,选择“鸭子”作为示例是常见的做法,因为“鸭子类型”(Duck Typing)是一个重要的概念,强调对象的行为而非其具体类型。在这个项目中,可能通过创建“鸭子”类,展示如何定义属性和方法,以及...

    《码农翻身》第二章 Java帝国.emmx

    小张的Duck Typing JDBC的诞生 JDBC后传 一个不安分的JDBC驱动 Java帝国之 Java Bean(上) Java帝国之 Java Bean(下) Java帝国之 函数式编程(上) Java帝国之 函数式编程 (下) 关于Java初学者需要知道的...

    08JVM是怎么实现invokedynamic的?(上)1

    这种机制允许 Java 应用程序使用鸭子类型(duck typing),只要是跑起来像只马的,它就是一只马,也就能够参加赛马比赛。 在 Java 中,方法调用会被编译为 invokestatic、invokespecial、invokevirtual 以及 invoke...

    Learning Object-Oriented Programming(PACKT,2015)

    You will explore how to maximize code reuse by writing code capable of working with objects of different types, and discover the advantage of duck typing in both Python and JavaScript, while you work ...

    Using Grok to Walk Like a Duck.pdf

    ### 使用Grok实现鸭子类型(Duck Typing) 在探讨如何使用Grok来实现鸭子类型之前,我们首先需要理解什么是鸭子类型以及它在编程中的应用。鸭子类型是一种编程概念,在动态类型语言(如Python)中尤其常见。这个概念...

    Mastering JavaScript Object-Oriented Programming

    You'll get to work with the different methods of inheritance and we'll show you how to avoid using inheritance with Duck Typing. From there, we'll move on to some advanced patterns for object creation...

    前端开源库-ducky

    "前端开源库-ducky" 是一个专门为JavaScript设计的开源库,主要用于处理鸭子类型(Duck Typing)的值。鸭子类型是动态类型的编程语言中的一种概念,它不关心对象的类型本身,而是关注对象的方法和属性是否满足特定的...

    python 多态 协议 鸭子类型(csdn)————程序.pdf

    鸭子类型(Duck Typing)是 Python 中的一种编程方式,即“如果它走起来像鸭子,叫起来像鸭子,那么它就是鸭子”。也就是说,如果一个类实现了某个协议的所有方法,那么这个类就可以被认为是一个鸭子类型的实例。...

    javascript设计模式 接口介绍.docx

    3. 鸭子模型(Duck Typing or "If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck.") 鸭子模型是动态类型语言中常见的接口实现方式。它基于行为而不是结构来判断...

    Python编程艺术

    同时,文章再次强调了Duck Typing的重要性,即关注对象的行为而非其类型,这对于理解和优化Python程序具有重要意义。 综上所述,《Python编程艺术》一文不仅仅是一份Python编程指南,更是对编程哲学的深刻反思。...

    Design Patterns in Ruby Dec 2007.rar

    Ruby的模块和 Duck Typing(鸭子类型)原则使得策略模式的实现尤为自然。 6. **代理模式**:为其他对象提供一个代理以控制对这个对象的访问。Ruby的闭包和对象模型使得创建代理对象非常简单。 7. **命令模式**:将...

    Java世界的Ruby

    Ruby的动态类型系统支持Duck Typing的概念,即只要一个对象的行为符合预期,就无需关心其具体类型。例如,在Ruby中可以通过定义`quack()`方法来模拟“鸭子”的行为: ```ruby class ADuck def quack puts "quack ...

    针对接口编程 java示例

    鸭子模式(Duck Typing)是一种动态类型检查的概念,它强调“如果它走起路来像鸭子,叫起来也像鸭子,那么它就是鸭子”。在Java中,我们可以通过实现特定接口来模拟鸭子模式。这种方式允许不同的类(即使不是直接...

    Effective C# 2ed (Covers C# 4.0)

    Use duck typing in C# (see Item 38) Spot the advantages of the dynamic and Expression types over reflection (see Items 42 and 43) Assess why query expressions are better than loops (see Item 8 ) ...

Global site tag (gtag.js) - Google Analytics