sturlamolden wrote: > Python allows the binding behaviour to be defined for descriptors, > using the __set__ and __get__ methods.
AFAIK, __getattribute__ calls them *explicitly*. > I think it would be a major > advantage if this could be generalized to any object, by allowing the > assignment operator (=) to be overloaded. > > One particular use for this would be to implement "lazy evaluation". > For example it would allow us to get rid of all the temporary arrays > produced by NumPy. > > For example, consider the expression: > [snip] > > y = a * b + c * d > > would then result in something like this: > > tmp1 = LazyExpr('__mul__',a,b) # symbolic representation of "a * b" > tmp2 = LazyExpr('__mul__',c,d) # symbolic representation of "c * d" > tmp3 = LazyExpr('__add__',tmp1,tmp1) # symbolic "a * b + c * d" > del tmp1 > del tmp2 > y = tmp3 # tmp3 gets evaluated as assignment is overloaded > To allow lazy evaluation, you need overloading of the assignment operator? Where should you overload it? y is less than None when you do that assignment. I don't really see the need for overloading here. Following the binding rules, __mul__ would (even without any hackery) be evaluated before __add__. > > Should there be a PEP to overload the assignment operator? If -- after this discussion -- community seems to like this feature, you could try to come up with some patch and a PEP. But not yet. > In terms of > syntax, it would not be any worse than the current descriptor objects > - but it would make lazy evaluation idioms a lot easier to implement. -- Stargaming -- http://mail.python.org/mailman/listinfo/python-list