Skip to main content
 首页 » 编程设计

python之带有 setter 的自定义属性

2025年05月04日9softidea

我正在寻找 property 内置函数的纯 Python 实现,以了解初始化的工作原理。我发现许多处理描述符接口(interface)(__get__、__set__)但没有描述setter 或deleter方法。这是definition吗在Python Decorator Library (大致)它的实现方式?

请您参考如下方法:

属性是一个简单、直接的描述符。描述符协议(protocol)由三个方法组成:__get__、__set__和__delete__。每个操作的属性仅调用用户提供的函数。

class my_property(object): 
    def __init__(self, getter, setter, deleter): 
        self.getter  = getter 
        self.setter  = setter 
        self.deleter = deleter 
 
    def __get__(self, instance, owner): 
        return self.getter(instance) 
 
    def __set__(self, instance, value): 
        self.setter(instance, value) 
 
    def __delete__(self, instance): 
        self.deleter(instance) 
 
class Foo(object): 
    def __init__(self): 
        self._x = 42 
 
    def get_x(self): 
        print 'getter' 
        return self._x 
 
    def set_x(self, value): 
        print 'setter' 
        self._x = value 
 
    def del_x(self): 
        print 'deleter' 
        del self._x 
 
    x = my_property(get_x, set_x, del_x) 
 
obj = Foo() 
print obj.x 
obj.x = 69 
del obj.x 
print obj.x