Я имитирую некоторые данные, используя дескриптор python.Когда будет вызван метод дескриптора python?
class Number:
def __init__(self):
self.num = 0
def __get__(self, instance, obj):
print("is getting number")
return self.number
def __set__(self, instance, value):
print("is setting number")
self.number = value
def __str__(self):
return str(self.number)
num = Number()
num = 2
print(num + 7)
выход:
9
Это кажется успешно вызвать метод __get__
и __set__
, но я не знаю, почему нет никакого вывода сообщений is getting number
или is setting number
.
Я не уверен, вызывает ли python метод дескриптора или нет.
Мой вопрос в том, когда будет называться дескрипторный метод?
Я Резюме мое происхождение догадка:
получить
- При использовании
obj.prop
, чтобы получить собственность и пропеллер еще один объект, который устанавливает дескриптор - когда высчитывает некоторое выражение должно получить значение например
a + 5
. Если a имеет дескриптор и вызывается__get__
- Если объект имитирует функцию, то вызовет
__get__
, чтобы сначала получить тело функции, а затем вызвать__call__
для запуска функции.
- При использовании
набор
- Когда объект появится в левой части оператора присваивания, такие как
obj = 5
- Когда объект появится в левой части оператора присваивания, такие как
Но я должен быть неправильным, я нужен кто-то сказать мне правильная концепция.
спасибо. так, дескриптор происходит только в свойстве объекта? – FreedomKnight
Я объясняю, что я сказал «эмулировать функцию». В официальном [doc] (http://docs.python.org/3/howto/descriptor.html#static-methods-and-class-methods). эмуляция использует '__get__' для эмуляции' @ classmethod'. поэтому, я думаю, вызов функции вызовет сначала '__get__'. – FreedomKnight
@FreedomKnight: Да. Если вы используете Google, вы можете найти множество других вопросов о дескрипторах на этом сайте и описаниях в Интернете. – BrenBarn