有没有办法修补核心python类? 一些事情:
class Boo:
def is_empty(self) : return not self
list.is_empty = Boo.is_empty
TypeError:无法设置内置/扩展类型'list'的属性
我不想延长它,我想修补它。
对不起,我的意思是“猴子补丁”。
答案 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]