python的新式類是2.2版本引進(jìn)來的,我們可以將之前的類叫做經(jīng)典類或者舊類扯夭。為什么要在2.2中引進(jìn)new style class呢鞍匾?官方給的解釋是:
為了統(tǒng)一類(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
繼承的搜索順序
繼承搜索的順序發(fā)生了改變,經(jīng)典類多繼承屬性搜索順序: 先深入繼承樹左側(cè),再返回构拳,開始找右側(cè);新式類多繼承屬性搜索順序: 先水平搜索梁棠,然后再向上移動(dòng)
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 默認(rèn)都是舊式類凫海,除非顯示的繼承object
python3.x 默認(rèn)都是新式類濒蒋,隱式的繼承object