微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我试图在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 举报,一经查实,本站将立刻删除。