This is one of the unfortunate effects of the existence of "old-style" classes in Python 2. The old-style class hierarchy is distinct from the new-style class hierarchy, but instances of old-style classes are still objects (since in Python, *everything* is an object).

For new code, and whenever you have an opportunity to refactor old code, you should use new-style classes, by inheriting your class from object (or from another class that inherits from object).

On Tue, Oct 21, 2014 at 9:43 AM, Andreas Maier <> wrote:

Hi. Today, I ran across this, in Python 2.7.6:

>>> class C:
...   pass
>>> issubclass(C,object)
>>> isinstance(C(),object)
True   <-- ???

The description of isinstance() in Python 2.7 does not reveal this result
(to my reading).

>From a duck-typing perspective, one would also not guess that an instance
of C would be considered an instance of object:

>>> dir(C())
['__doc__', '__module__']
>>> dir(object())
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__',
'__hash__', '__init__', '__new__', '__reduce__
', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__',

-> What is the motivation for isinstance(C,object) to return True in Python


Andreas Maier
IBM Senior Technical Staff Member, Systems Management Architecture & Design
IBM Research & Development Laboratory Boeblingen, Germany, +49-7031-16-3654
IBM Deutschland Research & Development GmbH
Vorsitzende des Aufsichtsrats: Martina Koederitz
Geschaeftsfuehrung: Dirk Wittkopp
Sitz der Gesellschaft: Boeblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294

Python-Dev mailing list

--Guido van Rossum (