Python 2.7 is different because all classes are automatically new-style classes. In Python 2.7 you would have to overwrite __getattribute__() but I am on Python 2.3 here. And I have to stay on Python 2.3 for now…welcome to hell :-) Andreas On 7 Nov 2016, at 13:23, Michael Howitz wrote:
Am 07.11.2016 um 13:01 schrieb Andreas Jung <lists@zopyx.com>:
I have a large Python 2.3 based installation with 200k LOC. As part of a migration project I need to intercept all attribute lookups of all old-style class.
Old legacy code:
class Foo(Bar): ...
My idea is to inject a common mixin class like
class Foo(Bar, Mixin): ...
class Mixin:
def __getattr__(self, k) print repr(self), k return Foo.__getattr__(self, k)
Hi Andreas,
I doubt that your approach works. Attributes defined on `Foo` are _not_ resolved using __getattr__. See the following example using Python 2.7:
In [1]: 1 class A: 2 x = 'foo' 3 def __getattr__(self, key): 4 return 'bar'
In [2]: a = A()
In [3]: a.x Out[3]: 'foo'
In [4]: a.b = 'b'
In [5]: a.b Out[5]: 'b'
Maybe I am missing something here.
-- Mit freundlichen Grüßen Michael Howitz