Duck Type in Python

在程序设计中,鸭子类型(英语:duck typing)是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定

“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”

就我个人的理解来看,duck type 是一种语法糖,它不强调对象的类型,或者它继承自哪里,只在乎它是否能够实现了我需要的方法,总的来说,就是,不管你什么出身,不管黑猫白猫,能抓住老鼠的就是好猫。

这种动态类型可以很方便的实现多态,

不说了,任何只讲白话不拿代码的都是耍流氓:

 1 class person:
 2
 3     def go(self):
 4         print("it is walking")
 5
 6 class bird:
 7     def go(self):
 8         print("it is walking")
 9
10 def func(a):
11     a.go()
12 for i in [person(),bird()]:
13     func(i)

结果:

it is walking
it is walking
[Finished in 0.2s]

so?

时间: 2024-11-03 01:22:46

Duck Type in Python的相关文章

duck type鸭子类型

在程序设计中,鸭子类型(英语:duck typing)是动态类型的一种风格.在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定.这个概念的名字来源于由James Whitcomb Riley提出的鸭子测试(见下面的"历史"章节),"鸭子测试"可以这样表述: "当看到一只鸟走起来像鸭子.游泳起来像鸭子.叫起来也像鸭子,那么这只鸟就可以被称为鸭子."[1][2] 在鸭子类型中,关注的不是对象的类型本

O(n) O(log n) blist: an asymptotically faster list-like type for Python

https://pypi.org/project/blist/ blist: an asymptotically faster list-like type for Python — blist 1.3.6 documentation http://stutzbachenterprises.com/blist/ The blist is a drop-in replacement for the Python list that provides better performance when

Python type class metaclass

'type' 是 python built-in metaclass 其他继承自 ‘type’的class都可以是 Metaclass 子类可以继承父类的metaclass 然而 __metaclass__属性不能继承 __metaclass__可以定义成任何返回instance of 'type' callable __new__(cls, ...)  : create instance of cls __init__(self, ...) :instance already created

Duck typing

第一次了解到这个词汇是我在知乎提了一个问题,知乎传送地址. vczh在答案中提到了duck type,于是google了一番,大概了解了一下,附上wiki地址. 在面向对象的编程语言中,所谓的duck type是指:对象的属性和方法决定了类的语义,而不是它的继承关系或者是它实现了某个接口.这个概念最早是由James Whitcomb Riley提出的,下面这句话可以帮助我们理解: When I see a bird that walks like a duck and swims like a

python中import的机制与实现

原文出处: 刘畅(@你猜我猜不猜猜你是谁) 概述 Python 是一门优美简单.功能强大的动态语言.在刚刚接触这门语言时,我们会被其优美的格式.简洁的语法和无穷无尽的类库所震撼.在真正的将python应用到实际的项目中,你会遇到一些无法避免的问题.最让人困惑不解的问题有二类,一个 编码问题,另一个则是引用问题. 本文主要讨论关于Python中import的机制与实现.以及介绍一些有意思的Python Hooks. Python 类库引入机制 首先,看一个简单的例子: """

Supporting Python 3(支持python3)——为Python 3做准备

为Python3作准备 在开始添加Python 3的支持前,为了能够尽可能地顺利过度到Python 3,你应该通过修改对2to3来说很难苦的东西来给你的代码做一些准备.即使你现在不打算迁移到Python 3,有一些事你也可以现在就做,这些事在一些情况下它们甚至会加快你的代码在Python 2下的运行. 你可能想要读在I用现代的用句来改善你的代码 上包含许多其他一些你能够用到你的代码中的改进的章节. 在Python 2.7下运行 这个过程的第一步是让你的代码在Python 2.6或者2.7下运行.

萌新向Python数据分析及数据挖掘 第二章 pandas 第二节 Python Language Basics, IPython, and Jupyter Notebooks

Python Language Basics, IPython, and Jupyter Notebooks In [5]: import numpy as np #导入numpy np.random.seed(12345)#设定再现的的随机数 np.set_printoptions(precision=4, suppress=True) #设置打印设置 Signature: np.set_printoptions(precision=None, threshold=None, edgeitem

深刻理解Python中的元类(metaclass)

译注:这是一篇在Stack overflow上很热的帖子.提问者自称已经掌握了有关Python OOP编程中的各种概念,但始终觉得元类(metaclass)难以理解.他知道这肯定和自省有关,但仍然觉得不太明白,希望大家可以给出一些实际的例子和代码片段以帮助理解,以及在什么情况下需要进行元编程.于是e-satis同学给出了神一般的回复,该回复获得了985点的赞同点数,更有人评论说这段回复应该加入到Python的官方文档中去.而e-satis同学本人在Stack Overflow中的声望积分也高达6

python学习笔记1-元类__metaclass__

type 其实就是元类,type 是python 背后创建所有对象的元类 python 中的类的创建规则: 假设创建Foo 这个类 class Foo(Bar): def __init__(): pass Foo中有__metaclass__这个属性吗?如果有,Python会在内存中通过__metaclass__创建一个名字为Foo的类对象,他是一个类,但是本身类就是对象,一个python文件模块也属于一个对象. 如果Python没有找到__metaclass__,它会继续在Bar(父类)中寻找