03-python的新式类和经典类区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了03-python的新式类和经典类区别相关的知识,希望对你有一定的参考价值。

新式类就是  class person(object): 这种形式的, 从py2.2 开始出现的

新式类添加了: 

__name__ is the attributes name.
__doc__ is the attributes docstring.
__get__(object) is a method that retrieves the attribute value from object.
__set__(object, value) sets the attribute on object to value.
__delete__(object, value) deletes the value attribute of object.

 

新式类的出现, 除了添加了大量方法以外, 还改变了经典类中一个多继承的bug, 因为其采用了广度优先的算法

Python 2.x中默认都是经典类,只有显式继承了object才是新式类
python 3.x中默认都是新式类,经典类被移除,不必显式的继承object

粘贴一段官网上的作者解释

技术分享

是说经典类中如果都有save方法, C中重写了save() 方法,  那么寻找顺序是 D->B->A, 永远找不到C.save()

代码演示:

#!/usr/bin/env python3
#coding:utf-8
‘‘‘
    新式类和经典类的区别, 多继承代码演示

‘‘‘

class A:
    def __init__(self):
        print this is A
    def save(self):
        print save method from A

class B:
    def __init__(self):
        print this is B

class C:
    def __init__(self):
        print this is c
    def save(self):
        print save method from C

class D(B, C):
    def __init__(self):
        print this is D


d = D()
d.save()

结果显示  A, 

注意: 在python3 以后的版本中, 默认使用了新式类, 是不会成功的

 

以上是关于03-python的新式类和经典类区别的主要内容,如果未能解决你的问题,请参考以下文章

python中新式类和经典类的区别

经典类和新式类的区别,c3算法

python中新式类和经典类

python 新式类和经典类(了解)

重写父类的方法及经典类和新式类的区别

python2中的新式类与经典类区别