Inconsistent behavior of descriptors
Denis S. Otkidach
ods at strana.ru
Tue Sep 30 12:15:10 EDT 2003
I've noticed that the order of attribute lookup is inconsistent
when descriptor is used. property instance takes precedence of
instance attributes:
>>> class A(object):
... def _get_attr(self):
... return self._attr
... attr = property(_get_attr)
...
>>> a=A()
>>> a.__dict__
{}
>>> a.__dict__['attr']=1
>>> a.__dict__
{'attr': 1}
>>> a.attr
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<stdin>", line 3, in _get_attr
AttributeError: 'A' object has no attribute '_attr'
But it doesn't when I use custom class of descriptor:
>>> class descr(object):
... def __get__(self, inst, cls):
... return inst._attr
...
>>> class B(object):
... attr = descr()
...
>>> b=B()
>>> b.__dict__
{}
>>> b.__dict__['attr']=1
>>> b.__dict__
{'attr': 1}
>>> b.attr
1
Subclasses of property behave like property itself:
>>> class descr2(property):
... def __get__(self, inst, cls):
... return inst._attr
...
>>> class C(object):
... attr = descr2()
...
>>> c=C()
>>> c.__dict__
{}
>>> c.__dict__['attr']=1
>>> c.__dict__
{'attr': 1}
>>> c.attr
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<stdin>", line 3, in __get__
AttributeError: 'C' object has no attribute '_attr'
Is it an undocumented feature or I have to submit a bug report?
--
Denis S. Otkidach
http://www.python.ru/ [ru]
More information about the Python-list
mailing list