我在看这篇文章,有几件事没有弄清楚
https://stackoverflow.com/a/14787522/1890488
他用这个密码
class O4(O3):
@property # this decorator makes this instancevar into a data descriptor
def var(self):
return "Data descriptors (such as properties) are high priority"
@var.setter # I'll let O3's constructor set a value in __dict__
def var(self, value):
self.__dict__["var"] = value # but I know it will be ignored
他说@property将任何实例变量转换为数据描述符。你知道吗
__get__
、__set__
和__del__
或者@property只等价于__get__
我不明白
是否有更多的装饰器将实例变量转换为数据描述符
它的功能是什么@变量设定器. 这也是数据描述符部分
如果查看系统上属性装饰器的代码,您会发现它包含三个参数:
fget
:获取变量的函数fset
:设置变量的函数fdel
:删除变量的函数。你知道吗由于通常使用decorator修饰单个函数,因此通常只需定义getter:
如果您还希望声明一个setter,您可以使用新的“属性”通过
.setter
包含一个setter:两者的结合相当于调用
my_var = property(get_my_var, set_my_var)
。你知道吗@property
调用property()
内置函数,您应该查阅文档以了解详细信息。你知道吗property
只有一个强制参数,即最左边的“getter”。其他的是setter
和deleter
。你知道吗使用带有
@
前缀的修饰符只是语法上的糖分。如果您愿意,您可以用一种更传统的方式(如果不是电话)调用property
:相关问题 更多 >
编程相关推荐