为什么属性设置器装饰器语法不会导致冲突?

问题描述

我试图在python中使用@property装饰器,而对于@x.setter块为何在以下工作却感到困惑:

class C(object):
    def __init__(self):
        self._x = None

    @property
    def x(self):
        return self._x

    @x.setter
    def x(self,value):
        self._x = value

    @x.deleter
    def x(self):
        del self._x

根据我对post的阅读,我了解

@property
def x(self):
    return self._x

等同于

def x(self):
    return self._x
x = property(x)

这对我来说很有意义。 x先引用一个函数,然后引用一个属性(以所述函数作为参数)。

但是,以与我们类似的方式考虑@x.setter块,

def x(self,value):
    self._x = value
x = x.setter(x)

同样,我们有x引用了一个函数,但是最后一行让我感到困扰。我们如何在同一行中将x既作为属性又作为函数?我希望这会引发一个错误(在python解释器中尝试时确实会发生此错误)。

当然,装饰器语法有效,所以我在思考它时一定有问题。范围是否随装饰器而变化,使得x引用内部的函数但不引用属性?也许指令像x = x.setter(def x(self,value): self._x = value)一样嵌套?但这会导致解释器出现语法错误...

我对Python来说还很陌生,所以我可能只是没有使用Google正确的术语。谢谢 为您提供帮助!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)