@Mokol

Пространство имен экземпляра класса дескриптора?

class NoneNegative:
    def __init__(self, name):
        self.name = name
        
    def __get__(self, instance, owner):
        return instance.__dict__[self.name]
    
    def __set__(self, instance, value):
        if value < 0:
            raise ValueError("cannot be negative")
        instance.__dict__[self.name] = value


class Order:
    price = NoneNegative("price")
    
    def __init__(self, name, price, quantity):
        self.name = name
        self.price = price
        self.quantity = quantity
    def total(self):
        return self.price * self.quantity
    

order1 = Order("apple", 1, 10)


Подскажите, пожалуйста, где находится простанство имен, в которое записывается (в init методе NoneNegative) self.name = name.
Откуда метод __get__ и __set__ ,берут значение атрибута self.name (return instance.__dict__[self.name]), тк запустить price.__dict__ невозможно
  • Вопрос задан
  • 57 просмотров
Решения вопроса 1
@Mokol Автор вопроса
Все оказалось проще... Значение по ключу "self.name" хранилось, как изначально и подразумевалось, в экземпляре дескриптора "price". Но до пространства имен "price" нельзя было добраться, тк мешал перегруженный метод __get__ (если его закомментировать, то можно открыть пространство имен так: Order.price.__dict__)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Wispik
@Wispik
vars(NoneNegative)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы