通用描述符类

class Descriptor:
    def __init__(self, initial_value=None):
        self._name = None
        self._initial_value = initial_value

    def __set_name__(self, owner_class, name):
        self._name = name

    def __get__(self, instance, owner_class):
        if instance is None:
            return self

        return instance.__dict__.get(self._name, self._initial_value)

    def __set__(self, instance, value):
        instance.__dict__[self._name] = value

    def __delete__(self, instance):
        del instance.__dict__[self._name]

该通用描述符类包含了四个方法:

__init__: 初始化对象,可以接受一个可选的初始值作为参数;
__set_name__: 当使用此描述符的实例被附加到拥有者类时调用。通过这种方式,将描述符与其使用的属性名称相关联;
__get__: 用于获取属性时自动调用的方法,返回属性值;
__set__: 用于设置属性时自动调用的方法,设置属性值;
__delete__: 用于删除属性时自动调用的方法,删除属性。
通用描述符类中的 __get__ 方法和 __set__ 方法被设计为通用方法,其中如果属性不存在,则返回初始值(如果提供),否则返回默认值 None。因此,可以使用此通用描述符类来创建任何属性。
posted @ 2023-04-08 20:40  我在路上回头看  阅读(9)  评论(0编辑  收藏  举报