有没有办法猴子修补核心python类?

时间:2017-02-22 23:04:55

标签: python class core

有没有办法修补核心python类? 一些事情:

class Boo:
    def is_empty(self) : return not self

list.is_empty = Boo.is_empty
  

TypeError:无法设置内置/扩展类型'list'的属性

我不想延长它,我想修补它。

对不起,我的意思是“猴子补丁”。

1 个答案:

答案 0 :(得分:3)

如果您的意思是monkey patching而不是duck typing,那么是的,您可以使用ctypes作为@ juanpa.arrivillaga在评论中提出:https://gist.github.com/mahmoudimus/295200

但即便如此,我仍然强烈反对它,因为如果他们导入你的模块,它可以打破其他人的代码。想象一下如果每个人开始搞乱内部情况会发生什么,你再也无法安全地导入任何东西了!

你应该做的是Python类的子类:

class Boo(list):
    def is_empty(self):
        return not self

>>> my_list = Boo([1, 2, 3, 4, 5])
>>> my_list2 = Boo([])
>>> my_list.is_empty()
False
>>> my_list2.is_empty()
True
>>> my_list2.append(5)
>>> my_list2.is_empty()
False
>>> my_list2
[5]