Closed
Description
This applies to both instances and classes.
If an object and it's class both have attributes with the same name, this prevents specialization of access to the object's attribute.
However, in this case specialization should only be prevented if the class's attribute is a data descriptor.
Example 1, instance:
class C:
x = 1
def __init__(self):
self.x = 2
C().x
C().x
above is 2
. It doesn't matter that C.x
exists, provided it isn't a data descriptor.
This failure shows up as "shadowed" in the stats
Example 2, class:
class Meta(type):
x = 1
class C(metaclass=Meta):
x = 1
C.x
C.x
is 2
. Meta.x
doesn't change that, as it isn't a data descriptor.
This failure shows up as "metaclass attribute" in the stats