猴子修补
在这种情况下,猴子修补意味着在定义之后向类中添加新的变量或方法。例如,假设我们将类 A
定义为
class A(object):
def __init__(self, num):
self.num = num
def __add__(self, other):
return A(self.num + other.num)
但是现在我们想在代码中添加另一个函数。假设此功能如下。
def get_num(self):
return self.num
但是我们如何在 A
中添加这个方法呢?这很简单,我们只是通过赋值语句将该函数放入 A
中。
A.get_num = get_num
为什么这样做?因为函数就像任何其他对象一样是对象,而方法是属于该类的函数。
函数 get_num
应该对所有现有的(已经创建的)以及 A
的新实例可用
这些添加可自动在该类(或其子类)的所有实例上使用。例如:
foo = A(42)
A.get_num = get_num
bar = A(6);
foo.get_num() # 42
bar.get_num() # 6
请注意,与其他一些语言不同,此技术不适用于某些内置类型,并且它不被认为是好的样式。