yiooxir
Июль 25, 2013 11:40:59
как переопределить метод присваивания у какого-то метода объекта. К примеру есть объект obj и у этого объекта есть метод obj.mth1 Я хочу, чтобы при написании такой конструкции obj.mth = 2, он не заменил значение этого метода на 2, а произвел со значением какое-то действие. (по аналогии в C++ это перегрузка оператора ‘=’ )
Какой внутренний метод в python отвечает за перегрузку данного оператора ?
FishHook
Июль 25, 2013 12:46:54
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
Июль 25, 2013 14:28:42
FishHook
Подскажите, пожалуйста, а почему нельзя использовать __setattr__. Заранее благодарен.
FishHook
Июль 25, 2013 14:35:29
4kpt,
насколько я понял ТСа ему гугл не рассказал, как реализовать в питоне properties.
“obj.mth = 2, он не заменил значение этого метода на 2, а произвел со значением какое-то действие.”
Если он имел в виду нечто другое, то я его не понял. В любом случае, перегрузка оператора присваивания мне видится не самым удачным решением.
4kpt
Июль 25, 2013 14:58:58
Кстати, как Вы считаете, будет ли рациональным при наличии множества таких атрибутов, использовать дескриптор?
P.S. Пытаюсь для себя поставить все точки над i. Часто сталкиваюсь с такой необходимостью.
FishHook
Июль 25, 2013 16:35:23
4kpt
Кстати, как Вы считаете, будет ли рациональным при наличии множества таких атрибутов, использовать дескриптор?P.S. Пытаюсь для себя поставить все точки над i. Часто сталкиваюсь с такой необходимостью.
Если я не ошибаюсь, то функция property как раз возвращает дескриптор, а декораторы - не более чем синтаксический сахар.
4kpt
Июль 25, 2013 17:13:48
Спасибо за ответ. Плюсанул за потраченное время :)
FishHook
Июль 25, 2013 17:26:25
4kpt
Спасибо за ответ. Плюсанул за потраченное время 
глянь
4kpt
Июль 25, 2013 17:40:21
Ядреная помесь :) Метод превратить в декскриптор с использованием декоратора. Спасибо. Взял на вооружение. Правда еще не знаю, где применить, но все же…
4kpt
Июль 25, 2013 18:06:50
P.S. Вопросик в-догонку (если можно). Зачем Вы в функцию передавали cls?