Руководство по дескрипторам Hettinger's хорошо описывает это. Цитата из него:
Дескриптор протокола
descr.__get__(self, obj, type=None) --> value
descr.__set__(self, obj, value) --> None
descr.__delete__(self, obj) --> None
Это все, что нужно.
Итак, вы можете называть аргументы по своему усмотрению, но обычно нет аргументов с именами от key
до __get__
(понятия не имею, почему вы пытаетесь его найти).
Снова пример с этого URL:
класс RevealAccess (объект):
"" "Дескриптор данных, который устанавливает и возвращает значения
нормально и печатает сообщение, регистрирующее их доступ.
"" "
def __init__(self, initval=None, name='var'):
self.val = initval
self.name = name
def __get__(self, obj, objtype):
print 'Retrieving', self.name
return self.val
def __set__(self, obj, val):
print 'Updating' , self.name
self.val = val
Обычно вы устанавливаете self.something
в __init__
(и / или __set__
, если вы его определили) и возвращаете что-то, основываясь на self.something
в __get__
. Конечно, этот пример просто print
s "что-то" при получении и установке, обычно вы делаете что-то более существенное; -).