Я узнаю о дескрипторах в python. Я хочу написать дескриптор не данных, но класс, имеющий дескриптор как его метод класса, не вызывает пространственный метод __get__
, когда я вызываю метод класса. Это мой пример (без __set__
):Написание дескриптора без данных в Python
class D(object):
"The Descriptor"
def __init__(self, x = 1395):
self.x = x
def __get__(self, instance, owner):
print "getting", self.x
return self.x
class C(object):
d = D()
def __init__(self, d):
self.d = d
А вот как я называю это:
>>>c = C(4)
>>>c.d
4
__get__
класса дескриптора не получает вызов. Но когда я также установил __set__
дескриптор, кажется, активизируются:
class D(object):
"The Descriptor"
def __init__(self, x = 1395):
self.x = x
def __get__(self, instance, owner):
print "getting", self.x
return self.x
def __set__(self, instance, value):
print "setting", self.x
self.x = value
class C(object):
d = D()
def __init__(self, d):
self.d = d
Теперь я создать C
экземпляр:
>>> c=C(4)
setting 1395
>>> c.d
getting 4
4
и оба __get__, __set__
присутствуют. Кажется, что мне не хватает некоторых базовых понятий о дескрипторах и способах их использования. Может ли кто-нибудь объяснить это поведение __get__, __set__
?