0

This is an advanced version of Python: how to implement __getattr__()?

How do I write a __getattr__ method such that it will be invoked for class attributes (rather than instances of classes)? I tried the obvious

    class MyClass:
        @classmethod
        def __getattr__(cls, name):
            if name not in ['attr','attr2']:
                raise AttributeError(name=name, obj=cls)
            val =f'class {name}'
            cls.__setattr__(cls, name, val)
            return val

But it didn't work. Specifically, MyClass.attr returned "type object 'Foo' has no attribute 'attr'", and once I had created an instance of MyClass, instance.attr failed with "TypeError: can't apply this setattr to type object"

Background: I have a large number of mechanically generated types which map integers to strings and back again. Most of these classes are not used in any particular invocation of the program, so I want to save space and import time by defining the "forward" dictionary, and then use __getattr__ to generate the "reverse" dictionary on demand.

0 Answers0