New-style classes were introduced in Python 2.2 to unify classes and types. They inherit from the top-level
object type. A new-style class is a user-defined type, and is very similar to built-in types.
# new-style class class New(object): pass # new-style instance new = New() new.__class__ # <class '__main__.New'> type(new) # <class '__main__.New'> issubclass(New, object) # True
Old-style classes do not inherit from
object. Old-style instances are always implemented with a built-in
# old-style class class Old: pass # old-style instance old = Old() old.__class__ # <class __main__.Old at ...> type(old) # <type 'instance'> issubclass(Old, object) # False
In Python 3, old-style classes were removed.
New-style classes in Python 3 implicitly inherit from
object, so there is no need to specify
class MyClass: pass my_inst = MyClass() type(my_inst) # <class '__main__.MyClass'> my_inst.__class__ # <class '__main__.MyClass'> issubclass(MyClass, object) # True