type, object hierarchy?

7stud bbxx789_05ss at yahoo.com
Sun Feb 3 22:36:15 EST 2008


print dir(type)      #__mro__ attribute is in here
print dir(object)   #no __mro__ attribute


class Mammals(object):
    pass
class Dog(Mammals):
    pass

print issubclass(Dog, type)   #False
print Dog.__mro__

--output:--
(<class '__main__.Dog'>, <class '__main__.Mammals'>, <type 'object'>)


The output suggests that Dog actually is a subclass of type--despite
the fact that issubclass(Dog, type) returns False.  In addition, the
output of dir(type) and dir(object):


['__base__', '__bases__', '__basicsize__', '__call__', '__class__',
'__cmp__', '__delattr__', '__dict__', '__dictoffset__', '__doc__',
'__flags__', '__getattribute__', '__hash__', '__init__',
'__itemsize__', '__module__', '__mro__', '__name__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__',
'__subclasses__', '__weakrefoffset__', 'mro']

['__class__', '__delattr__', '__doc__', '__getattribute__',
'__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__',
'__repr__', '__setattr__', '__str__']

suggests that type inherits from object since type has all the same
attributes as object plus some additional ones.  That seems to
indicate a hierarchy like this:


object
 |
 V
type
 |
 V
Mammals
 |
 V
Dog


But then why does issubclass(Dog, type) return False?



More information about the Python-list mailing list