3

property初期化がどのように機能するかを理解するために、組み込みの純粋な Python 実装を探しています。__get__記述子インターフェイス ( 、__set__)を扱うものはたくさんありますが、setterまたはdeleterメソッドを記述しているものはありません。Python Decorator Libraryでのこの定義は(大まかに) 実装されている方法ですか?

4

2 に答える 2

3

プロパティは単純で直接的な記述子です。__get__記述子プロトコルは、 、__set__、の 3 つのメソッドで構成されます__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
于 2011-08-01T23:18:13.567 に答える