zoukankan      html  css  js  c++  java
  • 三、鸭子类型

    1、什么是鸭子类型

    “当看到一只鸟走起来像鸭子,游泳起来像鸭子,叫起来也像鸭子,那么这只鸟就可以被称为鸭子”。即如果其他类实现了一个类A的所有方法,那么其他类也可以看作是A类,在使用A类的地方同样可以使用实现了A类所有方法的其他类

    2、实例

    class Duck():
        def walk(self):
            print('I walk like a duck')
        def swim(self):
            print('i swim like a duck')
    
    class Dog():
        def walk(self):
            print('this one walk like a duck') 
        def swim(self):
            print('this man swim like a duck')
    
    def test(duck):
        duck.walk()
        duck.swim()
    
    duck = Duck()
    test(duck)
    
    dog = Dog()
    test(dog)
    
    '''
    I walk like a duck
    i swim like a duck
    this one walk like a duck
    this man swim like a duck
    '''

    Dog类拥有和Duck类一样的walk和swim方法,那么当一个函数需要传入Duck类,并且用到Duck类的walk和swim方法,那么传入Dog类,也一样是可以运行的,函数并不会检查对象的类型是不是Duck类,只要它拥有walk和swim方法,就可以被正确调用

    class Company(object):
        def __init__(self,employee_list):
            self.employee = employee_list
        def __getitem__(self,item):
             return self.employee[item]
    company = Company(["tom","bob","jane"])
    for em in company:
        print(em)

    Company类实现了迭代相关的__getitem__魔法函数,Company类对应的对象company就可以当成一个迭代对象进行遍历

    若Company类实现了集合、序列相关的魔法函数,那么它对应的对象同样可以当成一个集合、序列来操作

  • 相关阅读:
    idea 编译内存溢出
    版本兼容问题 用于数据存储的持久化
    java8 函数接口
    akka 的集群访问方式
    Akka Cluster Sharding
    讨厌的adb占用
    安卓编译 签名包
    linux 系统的 cache 过大,解决方案
    kotlin 简单处理 回调参数 加?
    HTML CSS + DIV实现局部布局
  • 原文地址:https://www.cnblogs.com/slfh/p/10786108.html
Copyright © 2011-2022 走看看