簡體   English   中英

帶有setter的Python自定義屬性

[英]Python custom property with setter

我正在尋找內置的python屬性的純python實現,以了解初始化的工作原理。 我發現許多處理描述符接口( getset )的方法,但沒有一個描述setter或deleter方法。 是否是實現(大約)的方式嗎?

屬性是一個簡單,直接的描述符。 描述符協議包含三種方法: __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

作為注釋:有一種簡單的方法可以將屬性添加到Python列表對象。 在課堂上翹曲。

>>> class Foo(list): pass
>>> l = Foo([1,2,3])
>>> l.foo = 'bar'
>>> l
[1, 2, 3]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM