在以下代码中,方法名称name
在同一Person
范围内使用了三次:
class Person:
def __init__(self, name):
self._name = name
@property
def name(self): # name = property(name)
"name property docs"
print('fetch...')
return self._name
@name.setter
def name(self, value): # name = name.setter(name)
print('change...')
self._name = value
@name.deleter
def name(self): # name = name.deleter(name)
print('remove...')
del self._name
理论上,装饰器等同于名称重新绑定。它不应该影响范围。所以在上面的代码中,最后一个name
方法应该是装饰器正在转换的唯一幸存方法。
我的问题是,什么机制使装饰者能够准确地选择'正确'的方法,而不是理论上应该覆盖所有先前方法的最后一种方法?