Home  >  Article  >  Backend Development  >  Detailed explanation of the difference between python new-style classes and old-style classes

Detailed explanation of the difference between python new-style classes and old-style classes

高洛峰
高洛峰Original
2017-03-16 17:20:471950browse

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 &#39;instance&#39;>
 
c2.__class__            # 输出-><class &#39;__main__.newClass&#39;>
type(c2)                # 输出-><class &#39;__main__.newClass&#39;>

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn