理解get、set和Python描述符
我试图了解什么是Python的描述符以及它们的用途。我了解它们的工作原理,但这是我的疑问。考虑以下代码:
class Celsius(object): def __init__(self, value=0.0):
self.value = float(value)
def __get__(self, instance, owner):
return self.value
def __set__(self, instance, value):
self.value = float(value)
class Temperature(object):
celsius = Celsius()
- 为什么需要描述符类?
- 什么是
instance
和owner
这里?(在中__get__
)。这些参数的目的是什么? - 我将如何调用/使用此示例?
回答:
描述符是如何实现Python property
类型的。描述符仅实现__get__
,__set__
等等,然后被添加到其定义中的另一个类中(就像你上面对Temperature
类所做的一样)。例如:
temp=Temperature()temp.celsius #calls celsius.__get__
访问你为描述符分配的属性(celsius在上面的示例中)调用适当的描述符方法。
instancein __get__
是类的实例(因此,在上面,__get__
将接收temp,owner而是带有描述符的类(因此将是Temperature
)。
你需要使用描述符类来封装为其提供动力的逻辑。这样,如果描述符用于缓存某些昂贵的操作(例如),它可以将值存储在自身而不是其类上。
关于描述符的文章可以在这里找到。
编辑:正如jchl
在评论中指出的,如果你只是尝试Temperature.celsius
,instance
将是None
。
以上是 理解get、set和Python描述符 的全部内容, 来源链接: utcz.com/qa/403064.html