New-style vs. old-style classes

suggest change

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 instance type.

# 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 MyClass(object) anymore.

class MyClass:
    pass

my_inst = MyClass()

type(my_inst)
# <class '__main__.MyClass'>
my_inst.__class__
# <class '__main__.MyClass'>
issubclass(MyClass, object)
# True

Feedback about page:

Feedback:
Optional: your email if you want me to get back to you:



Table Of Contents