Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 8, 2018 16:27:11

clipper1995
Зарегистрирован: 2018-03-19
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Понять дескрипторы

Всем привет! Перечитываю статьи и доки про дескриптор, вроде все понятно, за исключением – почему во всех примерах приводятся дескрипторы для атрибутов класса, а не атрибутов экземпляра. Или я просто не смог найти такие примеры? Интересует аспект применения дескрипторов для изменения своих объектов.
В примере ниже меняется атрибут класса, а как мне создать дескриптор на атрибут экземпляра? Или так дескрипторы не применяются. (з.ы. - хороший код лучше пояснений)

 class Descriptor:
    def __get__(self, obj, obj_type):
        print("GET! ", end="")
        return self.obj
    def __set__(self, obj, value):
        self.obj = value
        print("SET!")
    def __delete__(self, obj):
        print("DELETE!")
        del self.obj
 
class Class:
    attr1 = Descriptor()
    def __init__(self):
        self.attr2 = Descriptor()
 
instance1 = Class()
instance2 = Class()
 
instance1.attr1 = "11"      # SET!
print(instance1.attr1)      # GET! 11
instance2.attr1 = 21        # SET!
print(instance1.attr1)      # GET! 21
print(instance2.attr1)      # GET! 21  - атрибут класса изменился и у всех экземпляров как и должно быть он един
instance2.attr2 = 100       # тут дескриптор не вызывается
print(instance2.attr2)      # 100

Офлайн

#2 Авг. 9, 2018 12:16:09

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Понять дескрипторы

clipper1995
В примере ниже меняется атрибут класса, а как мне создать дескриптор на атрибут экземпляра?
Никак, потому как дескриптор должен быть атрибутом класса по определению.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Авг. 9, 2018 12:16:46)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version