0

我偶然发现了这个在 Python 中将绑定方法动态分配给类实例的好技巧:

class X: pass
def f(self): pass

x = X()
x.f = f.__get__(x)

我想知道的是参考中指定了这种行为的位置。这是我找到的最接近的:

佩普 590

描述符操作指南

我想知道这种行为是否实际上在某处的语言参考中指定。这似乎是一个足够重要的用例,可以由文档来保证(即不清楚出现在HowTo中的内容是否演示了保证的语言特性或使用了实现细节,我想原则上认为,所有保证的功能都可以从规范中推断出来,而无需参考PEP)。

4

1 回答 1

1

你可能正在寻找这个位`:

object.__get__(self, instance, owner=None) 调用以获取所有者类的属性(类属性访问)或该类的实例(实例属性访问)。可选的所有者参数是所有者类。

您实际上是在调用function.__get__,其相当简单的实现(无论如何在 CPython 中)就在这里;它基本上是调用PyMethod_New,它基本上只是将一个函数与一个self.

于 2020-05-15T14:46:35.037 回答