class De: def __init__(self): self.common = 0 def __get__(self, instance, owner): return self.common def __set__(self, instance, value): self.common = value def __delete__(self, instance): del self.common #??? Протокол обосрали class Me: at = De() def __init__(self): self.name = 'Hello' b = Me() print(b.at)
1.) Почему если мы присвоим at к экземпляру, а не к классу, то Pyhon не будет обрабатывать операции “__get__” - дескриптора, а будет просто выводить нахождение дескриптора в памяти?
2.)Как дескриптор может самоудалить себя? При его удалении в __delete__ создаётся рекурсия. Но если мы будем удалять просто атрибут common дескриптора, то будет нарушаться протокол дескриптора.
Свойства:
class Me: def __init__(self): self.attr = 10 @property def bomb(self): return 'Something' @bomb.setter def bomb(self, value): self.attr = value @bomb.deleter def bomb(self): del self.attr b = Me() print(b.bomb) b.bomb = 10000
1.) Почему вечно приходится писать одно и тоже название метода (bomb), чтобы работали свойства? Почему мы не можем написать
def cond():...
bomb = bomb.setter(cond) # Возможно где-то ошибка (голова не хочет трудиться моя)
В общем:
1.) В чём принципиальное различие свойств от дескрипторов ( где-то я слышал, что это одно и тоже, но тем не менее хочется полную версию)
2.) Часто ли вам приходится писать дескрипторы?
3.) А свойства использовать часто приходится? (просто @property не в счёт (@property.setter и т.д в счёт.))
4.) Скорость полёта бабочки Паридес Аркас?
P.S Моё представление о дескрипторах и свойствах: Ещё один ненужный слой логики.