Найти - Пользователи
Полная версия: Переопределить метод присваивания у объекта
Начало » Python для новичков » Переопределить метод присваивания у объекта
1 2
yiooxir
как переопределить метод присваивания у какого-то метода объекта. К примеру есть объект obj и у этого объекта есть метод obj.mth1 Я хочу, чтобы при написании такой конструкции obj.mth = 2, он не заменил значение этого метода на 2, а произвел со значением какое-то действие. (по аналогии в C++ это перегрузка оператора ‘=’ )
Какой внутренний метод в python отвечает за перегрузку данного оператора ?
FishHook
class Foo(object):
    def __init__(self):
        self.value = None
    @property
    def x(self):
       return self.value
    @x.setter
    def x(self, value):
        print "set value to", value
        self.value = value
f = Foo()
f.x = 56
print f.x
4kpt
FishHook
Подскажите, пожалуйста, а почему нельзя использовать __setattr__. Заранее благодарен.
FishHook
4kpt,
насколько я понял ТСа ему гугл не рассказал, как реализовать в питоне properties.
“obj.mth = 2, он не заменил значение этого метода на 2, а произвел со значением какое-то действие.”
Если он имел в виду нечто другое, то я его не понял. В любом случае, перегрузка оператора присваивания мне видится не самым удачным решением.
4kpt
Кстати, как Вы считаете, будет ли рациональным при наличии множества таких атрибутов, использовать дескриптор?

P.S. Пытаюсь для себя поставить все точки над i. Часто сталкиваюсь с такой необходимостью.
FishHook
4kpt
Кстати, как Вы считаете, будет ли рациональным при наличии множества таких атрибутов, использовать дескриптор?P.S. Пытаюсь для себя поставить все точки над i. Часто сталкиваюсь с такой необходимостью.
Если я не ошибаюсь, то функция property как раз возвращает дескриптор, а декораторы - не более чем синтаксический сахар.
4kpt
Спасибо за ответ. Плюсанул за потраченное время :)
FishHook
4kpt
Спасибо за ответ. Плюсанул за потраченное время
глянь
4kpt
Ядреная помесь :) Метод превратить в декскриптор с использованием декоратора. Спасибо. Взял на вооружение. Правда еще не знаю, где применить, но все же…

4kpt
P.S. Вопросик в-догонку (если можно). Зачем Вы в функцию передавали cls?
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