Home > Article > Backend Development > Detailed explanation of the difference between python new-style classes and old-style classes
Python’s new-style classes were introduced in version 2.2. We can call the previous classes classic classes or old-style classes.
Why should we introduce new style class 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 d25de54e4c7c5d6de7e504cfb6558cc2. After introducing a new class, for example, ClassB is a new class, b is an instance of ClassB, b.__class__ and type(b) both return 'class '__main__.ClassB', so it is unified.
After introducing a new class, 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 the latest python (2.7) is used, 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(since a new class defined).
2. Classes inherit directly or indirectly from the built-in class object.
If you do not 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'>
The above is the detailed content of Detailed explanation of the difference between python new-style classes and old-style classes. For more information, please follow other related articles on the PHP Chinese website!