ooppython-2.x

Difference between object and instance in Python 2?


This happens in python2.7

I am working on the idea of meta class in python, almost all the tutorial refer object as instance of a class, in python. However, when playing with the class A(): form of defining a class, I saw this:

class ClsDef1():
    pass
C1 = ClsDef1()
print C1
<__main__.ClsDef1 instance at 0x2aea518>

class ClsDef2(object):
    pass
C2 = ClsDef2()
print C2
<__main__.ClsDef2 object at 0x2ae68d0>

This means when create a instance from a class that is not inherent from object, the instance is an instance, but when a class is inherent from object, the instance of the class is an object?

What is the difference? Which should I use?


This question is outdated and refers to a technical distinction that exists in Python 2.x only - referring to how instances of old-style and new-style classes are represented.

In general terminology, the words "instance" and "class" are talking about the same thing. Please see What is the difference between an instance and an object in Python? for a proper explanation.


Solution

  • This is the difference between new-style and old-style classes, which is explained in great detail in the documentation. Basically, in Python 2.x you should ensure you always inherit from object so that you get a new-style class. In Python 3, old-style classes have gone away completely.