gpt4 book ai didi

python - 了解 __get__ 和 __set__ 以及 Python 描述符

转载 作者:IT老高 更新时间:2023-10-28 12:08:53 25 4
gpt4 key购买 nike

我正在尝试了解 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()
  1. 为什么需要描述符类?

  2. 这里的instanceowner是什么? (在 __get__ 中)。这些参数的用途是什么?

  3. 我将如何调用/使用此示例?

最佳答案

描述符是 Python 的 property 类型的实现方式。描述符简单地实现 __get____set__ 等,然后在其定义中添加到另一个类(就像您在上面对 Temperature 类所做的那样)。例如:

temp=Temperature()
temp.celsius #calls celsius.__get__

访问您将描述符分配给的属性(在上面的示例中为 celsius)调用适当的描述符方法。

__get__ 中的

instance 是类的实例(如上,__get__ 将接收 temp,而owner 是带有描述符的类(所以它应该是 Temperature)。

您需要使用描述符类来封装支持它的逻辑。这样,如果描述符用于缓存一些昂贵的操作(例如),它可以将值存储在自身而不是其类中。

可以找到一篇关于描述符的文章 here .

编辑:正如 jchl 在评论中指出的那样,如果您只是尝试 Temperature.celsiusinstance 将是 None

关于python - 了解 __get__ 和 __set__ 以及 Python 描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3798835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com