无法理解Python中实例变量描述符

2024-06-25 06:58:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我在看这篇文章,有几件事没有弄清楚

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将任何实例变量转换为数据描述符。你知道吗

  1. 现在它是否意味着它会自动为该变量定义__get____set____del__

或者@property只等价于__get__

我不明白

  1. 是否有更多的装饰器将实例变量转换为数据描述符

  2. 它的功能是什么@变量设定器. 这也是数据描述符部分


Tags: 数据实例httpsselfgetvaluevardef
2条回答

如果查看系统上属性装饰器的代码,您会发现它包含三个参数:

  • fget:获取变量的函数
  • fset:设置变量的函数
  • fdel:删除变量的函数。你知道吗

由于通常使用decorator修饰单个函数,因此通常只需定义getter:

@property
def my_var(self):
    return self._my_var

如果您还希望声明一个setter,您可以使用新的“属性”通过.setter包含一个setter:

@my_var.setter
def my_var(self, value):
    self._my_var = value

两者的结合相当于调用my_var = property(get_my_var, set_my_var)。你知道吗

@property调用property()内置函数,您应该查阅文档以了解详细信息。你知道吗

property只有一个强制参数,即最左边的“getter”。其他的是setterdeleter。你知道吗

使用带有@前缀的修饰符只是语法上的糖分。如果您愿意,您可以用一种更传统的方式(如果不是电话)调用property

def var_get(self):
    return "Data descriptors (such as properties) are high priority"

def var_set(self, value):
    self.__dict__["var"]  = value 

var = property(var_get, var_set)

相关问题 更多 >