Python面向?qū)ο笾校航?jīng)典類(lèi)和新式類(lèi)的區(qū)別

Python 2.x中默認(rèn)都是經(jīng)典類(lèi),只有顯式繼承了object才是新式類(lèi)
Python 3.x中默認(rèn)都是新式類(lèi),不必顯式的繼承object
當(dāng)類(lèi)是經(jīng)典類(lèi)時(shí),多繼承情況下,會(huì)按照深度優(yōu)先方式查找
當(dāng)類(lèi)是新式類(lèi)時(shí),多繼承情況下,會(huì)按照廣度優(yōu)先方式查找

  1. 寫(xiě)法不一樣
class A:
    pass

class B(object):
    pass
  1. 在多繼承中,新式類(lèi)采用廣度優(yōu)先搜索,而經(jīng)典類(lèi)是采用深度優(yōu)先搜索。
# 經(jīng)典類(lèi)例子
class A:
    def __init__(self):
        print 'This is A'
    def save(self):
        print 'save method from A'
class B (A):
    def __init__(self):
        print 'this is B'
class C (A):
    def __init__(self):
        print 'this is C'
    def save(self):
        print 'save mothod from C'
class D(B,C):
    def __init__(self):
        print 'this is D'
d=D()
d.save()
# 輸出結(jié)果:經(jīng)典類(lèi)的搜索順序是D->B->A,是一種深度優(yōu)先查找方式
this is D
save method from A

# 新式類(lèi)例子:
class A(object):
    def __init__(self):
        print 'This is A'
    def save(self):
        print 'save method from A'
class B (A):
    def __init__(self):
        print 'this is B'
class C (A):
    def __init__(self):
        print 'this is C'
    def save(self):
        print 'save mothod from C'
class D(B,C):
    def __init__(self):
        print 'this is D'
d=D()
d.save()

# 運(yùn)行結(jié)果:新式類(lèi)的搜索順序是D->B->C->A,是一種廣度優(yōu)先查找方式
this is D
save mothod from C
  1. 新式類(lèi)新增
    1. 新式類(lèi)對(duì)象可以直接通過(guò)__class__屬性獲取自身類(lèi)型:type
    2. 新式類(lèi)增加了__getattribute__方法
    3. 新式類(lèi)增加了__slots__內(nèi)置屬性, 可以把實(shí)例屬性的種類(lèi)鎖定到__slots__規(guī)定的范圍之中。
    class Person(object):
    __slots__ = ('name', 'age')   #只允許Person擁有name和age屬性
    def __init__(self):
        self.name='aline'
        self.age=20
        self.sex='female'
    person=Person()
    
    # 運(yùn)行結(jié)果:報(bào)錯(cuò)
    AttributeError: 'Person' object has no attribute 'sex'
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容