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

 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
PEHDOM
clipper1995
В примере ниже меняется атрибут класса, а как мне создать дескриптор на атрибут экземпляра?
Никак, потому как дескриптор должен быть атрибутом класса по определению.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB