猴子修补

在这种情况下,猴子修补意味着在定义之后向类中添加新的变量或方法。例如,假设我们将类 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

请注意,与其他一些语言不同,此技术不适用于某些内置类型,并且它不被认为是好的样式。