理解get、set和Python描述符

发布于 2021-02-02 23:18:59

我试图了解什么是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. 我将如何调用/使用此示例?
关注者
0
被浏览
94
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    描述符是如何实现Python property类型的。描述符仅实现__get____set__等等,然后被添加到其定义中的另一个类中(就像你上面对Temperature类所做的一样)。例如:

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

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

    instancein __get__是类的实例(因此,在上面,__get__将接收temp,owner而是带有描述符的类(因此将是Temperature)。

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

    关于描述符的文章可以在这里找到。

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看