【发布时间】:2020-11-07 03:45:45
【问题描述】:
我知道我的问题似乎与其他人非常相似。但实际上并非如此,我搜索了很多并找不到我的答案。
据我们所知:
@mydecorator
def myfn():
pass
被(确切地说?)翻译成:
def myfn():
pass
myfn = mydecorator(myfn)
考虑以下类:
class C:
def __init__(self, language):
self._language = language
@property
def language(self):
return self._language
@language.setter
def language(self, value):
self._language = value
如果我们想把这些翻译成函数+赋值语句,对于getter是没有问题的:
def language(self):
return self._language
language = property(language)
但是二传手呢? :
def language(self, value):
self._language = value
language = language.setter(language)
我做了我以前做过的事,但那是行不通的。 在上一阶段(getter)之后,标签“语言”指的是属性对象。 现在它被重新分配给一个函数(函数首先出现)!所以这个 language.setter 不再起作用了,它不再是一个属性了。
我想当我们使用 @ 语法时可能会有一个额外的步骤。如果是,那是什么?我们可以说它们彼此大致相似吗?
如果不是,例如当我们将装饰器与属性对象一起使用时,它们的行为不仅仅是转换为函数+赋值语句?
【问题讨论】:
标签: python properties decorator