__bases__ misleading error message

Terry Reedy tjreedy at udel.edu
Sun Jan 25 01:55:18 CET 2015

On 1/24/2015 4:51 PM, Marco Buttu wrote:
> On 24/01/2015 20:24, Terry Reedy wrote:
>> On 1/24/2015 5:16 AM, Mario Figueiredo wrote:
>>> Consider the following code at your REPL of choice
>>>         class Sub:
>>>             pass
>>>         foo = Sub()
>>>         Sub.__bases__
>>>         foo.__bases__
>>> The last statement originates the following error:
>> This is an anomalous situation.

'This situation' being that Someclass.attro works but Someclass().attro 

   Normally, if a class has an attribute,

In other words, if 'Someclass.attro' evaluates to an object

>> instances have the same attribute

then 'Someclass().attro' *normally* evaluates to the same object

>> (unless overriden).

(unless 'Someclass().attro' has been bound to a different object)
because attribute lookup on an instance reverts to attribute lookup on 
the class and even its super classes (__bases__).  Someclass.__bases__ 
is special; it is not listed by dir(Someclass), and it is not accessible 
via an instance.

> That is not true:

What I said, as I meant it to be understood, is true.

Terry Jan Reedy

More information about the Python-list mailing list