Форум сайта python.su
0
как переопределить метод присваивания у какого-то метода объекта. К примеру есть объект obj и у этого объекта есть метод obj.mth1 Я хочу, чтобы при написании такой конструкции obj.mth = 2, он не заменил значение этого метода на 2, а произвел со значением какое-то действие. (по аналогии в C++ это перегрузка оператора ‘=’ )
Какой внутренний метод в python отвечает за перегрузку данного оператора ?
Офлайн
568
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
Офлайн
63
FishHook
Подскажите, пожалуйста, а почему нельзя использовать __setattr__. Заранее благодарен.
Офлайн
568
4kpt,
насколько я понял ТСа ему гугл не рассказал, как реализовать в питоне properties.
“obj.mth = 2, он не заменил значение этого метода на 2, а произвел со значением какое-то действие.”
Если он имел в виду нечто другое, то я его не понял. В любом случае, перегрузка оператора присваивания мне видится не самым удачным решением.
Офлайн
63
Кстати, как Вы считаете, будет ли рациональным при наличии множества таких атрибутов, использовать дескриптор?
P.S. Пытаюсь для себя поставить все точки над i. Часто сталкиваюсь с такой необходимостью.
Отредактировано 4kpt (Июль 25, 2013 14:59:51)
Офлайн
568
4kptЕсли я не ошибаюсь, то функция property как раз возвращает дескриптор, а декораторы - не более чем синтаксический сахар.
Кстати, как Вы считаете, будет ли рациональным при наличии множества таких атрибутов, использовать дескриптор?P.S. Пытаюсь для себя поставить все точки над i. Часто сталкиваюсь с такой необходимостью.
Офлайн
63
Спасибо за ответ. Плюсанул за потраченное время :)
Офлайн
568
Офлайн
63
Ядреная помесь :) Метод превратить в декскриптор с использованием декоратора. Спасибо. Взял на вооружение. Правда еще не знаю, где применить, но все же…
Отредактировано 4kpt (Июль 25, 2013 18:06:41)
Офлайн
63
P.S. Вопросик в-догонку (если можно). Зачем Вы в функцию передавали cls?
Офлайн