3

Why does Python see these classes as different data types?

>>> class A:
...    pass
...
>>> class B(object):
...     pass
...
>>> a = A()
>>> b = B()
>>> type(A)
<type 'classobj'>
>>> type(B)
<type 'type'>
>>> type(a)
<type 'instance'>
>>> type(b)
<class '__main__.B'>

I'm pretty new. So I don't really understand why it sees all of this as different data types. They are both classes so it seems as though they should be the same.

Echoic
  • 252
  • 3
  • 8

1 Answers1

6

You're using Python 2.

Python 2 allows classes that don't inherit from object, which was added in version 2.2. They behave differently from "new-style classes" in a few ways, and you've found a couple.

There's no reason for the different behaviour other than to retain backward-compatibility, that is to ensure that code written for old-style classes continues to work in new releases of Python 2.

Python 3 is not backward-compatible and does not have old-style classes. If you wrote the same code in Python 3, then A would inherit from object even though you don't say so explicitly.

Steve Jessop
  • 273,490
  • 39
  • 460
  • 699