美文网首页
Python的新式类与旧式类

Python的新式类与旧式类

作者: FangHao | 来源:发表于2017-06-06 23:03 被阅读0次

    python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧类。为什么要在2.2中引进new style class呢?官方给的解释是:

    为了统一类(class)和类型(type)

    In [1]: class A():
       ...:     a = 1
       ...:
    
    In [2]: class B(object):
       ...:     b = 2
       ...:
    
    In [3]: a = A()
    
    In [4]: b = B()
    
    In [5]: type(a)
    Out[5]: instance
    
    In [6]: type(b)
    Out[6]: __main__.B
    
    In [7]: a.__class__
    Out[7]: <class __main__.A at 0x10ef22668>
    
    In [8]: b.__class__
    Out[8]: __main__.B
    

    继承的搜索顺序

    继承搜索的顺序发生了改变,经典类多继承属性搜索顺序: 先深入继承树左侧,再返回,开始找右侧;新式类多继承属性搜索顺序: 先水平搜索,然后再向上移动

    slots

    新式类新增slots属性,可以限制类的属性和方法

    In [1]: class Person(object):
       ...:     __slots__ = ('name','age')
       ...:
    
    In [2]: p = Person()
    
    In [3]: p.name = 'FangHao'
    
    In [4]: p.age = 24
    
    In [5]: p.weigth = 150
    ---------------------------------------------------------------------------
    AttributeError                            Traceback (most recent call last)
    <ipython-input-5-0b75d36f0341> in <module>()
    ----> 1 p.weigth = 150
    
    AttributeError: 'Person' object has no attribute 'weigth'
    

    pyhton2.x 默认都是旧式类,除非显示的继承object
    python3.x 默认都是新式类,隐式的继承object

    相关文章

      网友评论

          本文标题:Python的新式类与旧式类

          本文链接:https://www.haomeiwen.com/subject/eynnfxtx.html