Python’s new-style classes were introduced in version 2.2. We can call the previous classes classic classes or old-style classes.
Why is new style class introduced in 2.2? The official explanation is:
To unify classes and types.
Before 2.2, for example, in version 2.1, classes and types were different. If a is an instance of ClassA, then a.__class__ returns ‘class __main__.ClassA‘, and type(a) returns always
After introducing new classes, there are other benefits, such as more built-in properties will be introduced, descriptors can be introduced, properties can be calculated, etc.
For forward compatibility, user-defined classes are classic classes by default. New classes need to inherit from the base class object of all classes or a new class that inherits from object.
It is worth noting that although you are using the latest python (2.7), some features will not work on old-style classes.
So, in order to ensure that you are using new-style classes, there are two methods:
1. Metaclass, add the following code at the front of the class module code __metaclass__ = classname (a custom new-style class).
2. Classes inherit directly or indirectly from the built-in class object.
If you don’t need to be compatible with old-style classes and old versions of classes, then keep them all new-style classes.
In Python3, these problems no longer exist, because all classes are subclasses of the object class (implicitly).
Code example:
class oldClass: #经典类 def __init__( self ): pass class newClass(object): #新类 def __init__( self ): pass c1 = oldClass() c2 = newClass() c1.__class__ # 输出-> <class __main__.oldClass at 0x0137BF10> type(c1) # 输出-> <type 'instance'> c2.__class__ # 输出-><class '__main__.newClass'> type(c2) # 输出-><class '__main__.newClass'>