class Foo(object): def __init__(self): self.counter = 0 def __get__(self, x, type_of_x): def getter(attr): self.counter += 1 return self.counter return getter foo = Foo() class X(object): __add__ = foo class Y(object): __getattribute__ = foo class Z(object): __getattr__ = foo print X() + 5 print X() + 7 print Y().spam print Y().bar print Z().bar print Z().baz