Saul Spatz wrote: > Thanks, Peter. I realize this is getting sort of academic now, as I know > how to do exactly what I want, but I'm still confused. Is __getattr__ a > special case then, even for classic classes?
Well, it never occured to me to try a per-instance __getattr__(), but you are about to answer your own question: > class Adder(): # python 2.7, classic class > def __init__(self, x): > self.x = x > self.__add__= lambda other: Adder(self.x+other.x) > self.__getattr__ = lambda name: self.test(name) > > def __str__(self): > return str(self.x) > > def test(self, name): > print("Hello from test") > raise AttributeError > > x = Adder(3) > y = Adder(4) > print(x+y) > x.junk() > > 7 > Traceback (most recent call last): > File "C:\Users\Saul\Documents\PythonProjects\test.py", line 18 > AttributeError: Adder instance has no attribute 'junk' > > Why does this work for __add__ and not for __getattr__? I don't know, I wasn't around when these decisions were made. It could be the initial performance tweak that would lead to a generalisation with newstyle classes. Or it is some kind of bootstrapping issue... -- http://mail.python.org/mailman/listinfo/python-list