Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 28, 2017 18:00:29

li_4
Зарегистрирован: 2017-11-28
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Десхреньтор и его родственники.

Добрый вечер, имею смутное представление о дескрипторах и свойствах, так как знакомлюсь с ними в первый раз. Коротко, что я непонятно:

 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 = bomb.setter(cond) # Возможно где-то ошибка (голова не хочет трудиться моя) 

В общем:
1.) В чём принципиальное различие свойств от дескрипторов ( где-то я слышал, что это одно и тоже, но тем не менее хочется полную версию)
2.) Часто ли вам приходится писать дескрипторы?
3.) А свойства использовать часто приходится? (просто @property не в счёт (@property.setter и т.д в счёт.))
4.) Скорость полёта бабочки Паридес Аркас?

P.S Моё представление о дескрипторах и свойствах: Ещё один ненужный слой логики.

Отредактировано li_4 (Ноя. 28, 2017 18:01:42)

Офлайн

#2 Ноя. 29, 2017 05:04:50

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Десхреньтор и его родственники.

li_4
Почему вечно приходится писать одно и тоже название метода (bomb)
Нифига не приходится
 # -*- coding:utf-8 -*-
  
class Me:
    def __init__(self):
        self.attr = 10
  
    @property
    def bomb(self):
        return self.attr
  
    @bomb.setter
    def c(self, value):
        self.attr = value
  
m = Me()
m.c = 3
print(m.bomb)
>>> 3

>>В чём принципиальное различие свойств от дескрипторов
Свойства (property) реализованы через дескрипторы. В чем принципиальное отличие фарша от котлет?

>>Часто ли вам приходится писать дескрипторы?
Дескрипторы обычно юзают в библиотечном коде, в прикладном они не очень нужны

>>А свойства использовать часто приходится?
Свойства - это просто синтаксический сахар. Можете писать вообще без свойств в стиле Java, где все сеттеры и геттеры - обычные методы setX(), getX(). Они не необходимы. Можете использовать, можете не использовать, дело вкуса. Я использую.

>>Скорость полёта бабочки Паридес Аркас?
У нас на форуме матом не выражаются

>>Ещё один ненужный слой логики.
Никто не заставляет. @classmethod - полезный декоратор или ненужный слой логики? Он, еслив что, реализован через дескрипторы.



Офлайн

#3 Ноя. 29, 2017 14:22:42

li_4
Зарегистрирован: 2017-11-28
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Десхреньтор и его родственники.

FishHook

FishHook
Нифига не приходится
Как я понял на практике, и в вашем коде - декораторы дескрипторы пишутся изначально для специфического атрибута? И они всего лишь изменяют стандартные операции чтения\изменения? И мой декоратор дескриптор реализован абсолютно неправильно. Или же всё таки такой подход существует и можно реализовывать поведение атрибута внутри него самого?

Отредактировано li_4 (Ноя. 29, 2017 15:53:28)

Офлайн

#4 Ноя. 29, 2017 15:44:11

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Десхреньтор и его родственники.

li_4
Для начала, я бы на вашем месте разобрался, что такое декоратор в питоне. Дескрипторы и декораторы это настолько далекие друг от друга понятия, что смешивать их в одной проблематике никак нельзя.



Офлайн

#5 Ноя. 29, 2017 15:51:30

li_4
Зарегистрирован: 2017-11-28
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Десхреньтор и его родственники.

FishHook
Да, неплохой совет. Но жопа в том что лутц ставит сначала дескрипторы и свойства в программу обучения, а потом уже декораторы. Мне дали представление что такое декораторы ему и следую.

Офлайн

#6 Ноя. 29, 2017 15:53:03

li_4
Зарегистрирован: 2017-11-28
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Десхреньтор и его родственники.

FishHook
Я дико извиняюсь, я перепутал в своём сообщение декоратор с дескриптором (не знаю о чём тогда думал)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version