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


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

    新式类添加了: 

    __name__ is the attribute's name.
    __doc__ is the attribute's 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 以后的版本中, 默认使用了新式类, 是不会成功的

     另外: 经典类中所有的特性都是可读可写的, 新式类中的特性只读的, 想要修改需要添加 @Texing.setter

  • 相关阅读:
    Nginx、PCRE和中文URL(UTF8编码)rewrite路径重写匹配问题
    Nginx 使用中文URL,中文目录路径
    再谈Nginx Rewrite, 中文URL和其它
    事务管理
    commons-dbcp连接池的使用
    JDBC操作简单实用了IOUtils
    JDBC进行处理大文件和批处理
    mysql日期函数(转)
    mysql约束(自己原先总结的有点不准)
    mysql笔记(前面自己写的不标准有些地方)
  • 原文地址:https://www.cnblogs.com/wenbronk/p/7141224.html
Copyright © 2020-2023  润新知