4

In Python I can define a class 'foo' in the following ways:

class foo:
    pass

or

class foo(object):
    pass

What is the difference? I have tried to use the function issubclass(foo, object) to see if it returns True for both class definitions. It does not.

IDLE 2.6.3      
>>> class foo:
        pass

>>> issubclass(foo, object)
False
>>> class foo(object):
        pass

>>> issubclass(foo, object)
True

Thanks.

Nate
  • 5,237
  • 7
  • 42
  • 52

3 Answers3

9

Inheriting from object makes a class a "new-style class". There is a discussion of old-style vs. new-style here: What is the difference between old style and new style classes in Python?

As @CrazyJugglerDrummer commented below, in Python 3 all classes are "new-style" classes. In Python 3, the following two declarations are exactly equivalent:

class A(object):
    pass

class A:
    pass
Community
  • 1
  • 1
steveha
  • 74,789
  • 21
  • 92
  • 117
2

The first creates an "old-style" class, which are deprecated and have been removed in Python 3. You should not use it in Python 2.x. See the documentation for the Python data model.

John Millikin
  • 197,344
  • 39
  • 212
  • 226
2

Old style and new style objects... they have sightly different behaviours, for example in the constructors, or in the method resolution order in multiple inheritance.

fortran
  • 74,053
  • 25
  • 135
  • 175