【发布时间】:2017-09-05 11:45:26
【问题描述】:
我很难理解 Python in a Nutshell 的最后一部分(粗体)
每实例方法
一个实例可以对所有属性都有特定于实例的绑定, 包括可调用的属性(方法)。对于一个方法,就像 for 任何其他属性(绑定到覆盖描述符的属性除外), 特定于实例的绑定隐藏了类级别的绑定: 属性查找在找到一个类时不考虑该类 直接在实例中绑定。一个特定于实例的绑定 可调用属性不执行任何转换 第 110 页的“绑定和未绑定方法”中详细介绍:属性 引用返回与之前完全相同的可调用对象 直接绑定到实例属性。
但是,这并不像您预期的那样工作 用于 Python 调用的特殊方法的每个实例绑定 隐含地作为各种操作的结果,如“特殊 方法”(第 123 页)。特殊方法的这种隐式使用总是 依赖于特殊方法的类级绑定(如果有)。 对于 示例:
def fake_get_item(idx): return idx class MyClass(object): pass n = MyClass() n.__getitem__ = fake_get_item print(n[23]) # results in: # Traceback (most recent call last): # File "<stdin>", line 1, in ? # TypeError: unindexable object
具体是什么意思?
为什么是例子的错误?
谢谢。
【问题讨论】:
-
看来你不能愚弄 python 来覆盖那个。查找必须要求更高,例如期望实例方法。你不提供一个。拍摄:用有效的实例方法覆盖
__getitem__也不起作用...
标签: python