Home  >  Article  >  Backend Development  >  The difference between python new-style classes and old-style classes

The difference between python new-style classes and old-style classes

高洛峰
高洛峰Original
2016-10-17 13:25:491191browse

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


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