0
点赞
收藏
分享

微信扫一扫

12.Python中的鸭子类型 (Duck Typing)

晒大太阳了 2022-04-05 阅读 41
python

《Python编程的术与道:Python语言进阶》视频课程
《Python编程的术与道:Python语言进阶》视频课程链接:https://edu.csdn.net/course/detail/28618

鸭子类型 (Duck Typing)

这个概念的名字来源于由James Whitcomb Riley提出的鸭子测试。鸭子测试可以这样表述:如果走起路来像鸭子,叫起来也像鸭子,那么它就是鸭子(If it walks like a duck and quacks like a duck, it must be a duck)。 在鸭子类型中,关注点在于对象的行为,能作什么;而不是关注对象所属的类型。

鸭子类型是编程语言中动态类型语言中的一种设计风格,一个对象的特征不是由父类决定,而是通过对象的方法决定的。

确定一个对象是否可以用于特定目的。 对于普通类型,是否适合取决于对象的类型。 在鸭子类型中,对象的适用性取决于某些方法和属性的存在,而不是对象本身的类型。

class Duck:
    def fly(self):
        print("Duck flying")

class Sparrow:
    def fly(self):
        print("Sparrow flying")

class Whale:
    def swim(self):
        print("Whale swimming")

for animal in Duck(), Sparrow(), Whale():
    animal.fly()
Duck flying
Sparrow flying



---------------------------------------------------------------------------

AttributeError                            Traceback (most recent call last)

<ipython-input-1-9e3c261f187d> in <module>
     12 
     13 for animal in Duck(), Sparrow(), Whale():
---> 14     animal.fly()


AttributeError: 'Whale' object has no attribute 'fly'
class Pycharm:
    def execute(self):
        print("Compiling")
        print("Running")

class MyEditor:
    def execute(self):
        print("Spell Check")
        print("Convention Check")
        print("Compiling")
        print("Running")

class Laptop:

    def code(self,ide):
        ide.execute()
ide = Pycharm()
lap1 = Laptop()
lap1.code(ide)
Compiling
Running
ide = MyEditor()
lap2 = Laptop()
lap2.code(ide)
Spell Check
Convention Check
Compiling
Running

我们可以使用一个函数 code() 来访问不同类中的相同方法。对于code() 函数来说,传入的参数并不一定需要是特定类型的,只需要保证传入的对象有一个 execute() 方法即可,它并不要求严格的继承体系

举报

相关推荐

0 条评论