Форум сайта python.su
0
Всем привет! Перечитываю статьи и доки про дескриптор, вроде все понятно, за исключением – почему во всех примерах приводятся дескрипторы для атрибутов класса, а не атрибутов экземпляра. Или я просто не смог найти такие примеры? Интересует аспект применения дескрипторов для изменения своих объектов.
В примере ниже меняется атрибут класса, а как мне создать дескриптор на атрибут экземпляра? Или так дескрипторы не применяются. (з.ы. - хороший код лучше пояснений)
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
Офлайн
294
clipper1995Никак, потому как дескриптор должен быть атрибутом класса по определению.
В примере ниже меняется атрибут класса, а как мне создать дескриптор на атрибут экземпляра?
[code python][/code]
Отредактировано PEHDOM (Авг. 9, 2018 12:16:46)
Офлайн