类的补充(鸭子类型、猴子补丁)

鸭子类型(Duck Typing)

鸭子类型是对Python中数据类型本质上是由属性和行为来定义的一种解读
Python是一种动态语言,不像Java和C++这种强类型语言,Python里实际上没有严格的类型检查
只要某个对象具有鸭子的方法,可以像鸭子那样走路和嘎嘎叫,那么它就可以被其它函数当做鸭子一样调用
示例:

class Duck:

    def __init__(self, name):
        self.name = name

    def bark(self):
        print("gay... gay...gay...")

    def swim(self):
        print("A duck named " + self.name + " is swimming...")

class Goose:

    def __init__(self, name):
        self.name = name

    def bark(self):
        print("goo... goo...goo...")

    def swim(self):
        print("A doose named " + self.name + " is swimming...")
  • 设计一个duck_show函数,其设计的本意是需要传入一个Duck对象作为参数的
  • 分别构建Duck类以及Goose类的对象,并传入duckshow函数进行调用
def duck_show(duck: Duck):
    duck.swim()
    duck.bark()


if __name__ == '__main__':
    yaya = Duck("yaya")
    ee = Goose("ee")

    duck_show(yaya)
    duck_show(ee)
'''
输出:
A duck named yaya is swimming...
gay... gay...gay...
A doose named ee is swimming...
goo... goo...goo...
'''

由于Python是动态语言,没有严格类型检查,Goose这个类具有和Duck这个类相同的方法,ee这只鹅划起水来像只鸭子,叫起来也像一只鸭子,所以duckshow这个函数也可以对ee进行作用,故Python其数据类型属于鸭子类型。

猴子补丁(Monkey Patching)

猴子补丁是一种在运行时动态修改类或模块行为的技巧。它允许程序在运行时修改已有的代码,通常用于修复bug、添加新功能或改变现有类的行为,而不需要修改原始代码。猴子补丁可以通过直接修改类或模块的属性来实现。
示例:

class MyClass:  
    def my_method(self):  
        print("Original Method")  
  
# 猴子补丁:在运行时修改MyClass的my_method方法  
def new_method(self):  
    print("Modified Method")  
  
MyClass.my_method = new_method  
  
obj = MyClass()  
obj.my_method()  # 输出: Modified Method

在这个例子中,我们定义了一个 MyClass 类和一个 my_method 方法。然后,我们通过将 MyClass 的 my_method 属性替换为一个新的函数 new_method 来实现猴子补丁。这样,所有后续创建的 MyClass 实例在调用 my_method 时都会执行 new_method 函数。

总结

  • 鸭子类型 是一种动态类型系统的概念,它基于对象能够执行的操作来确定其行为,而不是基于对象的类型。
  • 猴子补丁 是一种在运行时动态修改类或模块行为的技巧,通常用于修复bug、添加新功能或改变现有类的行为。
  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值