为什么在装饰链代码时没有命名冲突?

时间:2018-01-08 03:34:50

标签: python python-3.x python-decorators

在以下代码中,方法名称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方法应该是装饰器正在转换的唯一幸存方法。

我的问题是,什么机制使装饰者能够准确地选择'正确'的方法,而不是理论上应该覆盖所有先前方法的最后一种方法?

0 个答案:

没有答案