[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Extra AttributeError inside property - possible bug ?


bellow is a simple Python2 example of a class which defines __getattr__ method and a property, where AttributeError exception is raised:

from __future__ import print_function

class MyClass(object):
    def __getattr__(self, name):
        print('__getattr__ <<', name)
        raise AttributeError(name)
        return 'need know the question'

    def myproperty(self):
        return 42

my_inst = MyClass()

# produces following output
__getattr__ << missing_attribute
__getattr__ << myproperty
Traceback (most recent call last):
  File "a.py", line 84, in <module>
  File "a.py", line 74, in main
    print('==', my_inst.myproperty)
  File "a.py", line 36, in __getattr__
    raise AttributeError(name)
AttributeError: myproperty

By the documentation https://docs.python.org/2/reference/datamodel.html#object.__getattr__ , if class defines __getattr__ method, it gets called at AttributeError exception and should return a computed value for name, or raise (new) AttributeError exception.

Why is __getattr__ called 2nd time, with 'myproperty' argument ?!?
self.myproperty does exist and also at first call of __getattr__ new AttributeException with 'missing_attribute' is raised. I can't see any reason for this behavior.