理解 __get__ 和 __set__ 以及 Python 描述符

2023-12-07

I am trying了解 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. What is instance and owner这里? (在__get__)。这些参数的目的是什么?

  3. 我将如何调用/使用这个例子?


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

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

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

instance in __get__是类的实例(所以上面,__get__会收到temp, while owner是具有描述符的类(所以它是Temperature).

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

Python 官方文档包括关于描述符的文章更详细地介绍了它们的工作原理,包括几个示例。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

理解 __get__ 和 __set__ 以及 Python 描述符 的相关文章

随机推荐