python的新式類是2.2版本引進(jìn)來(lái)的,我們可以將之前的類叫做經(jīng)典類或者舊式類。
為什么要在2.2中引進(jìn)newstyleclass呢?官方給的解釋是:
為了統(tǒng)一類(class)和類型(type)。
在2.2之前,比如2.1版本中,類和類型是不同的,如a是ClassA的一個(gè)實(shí)例,那么a.__class__返回‘class__main__.ClassA‘,type(a)返回總是。而引入新類后,比如ClassB是個(gè)新類,b是ClassB的實(shí)例,b.__class__和type(b)都是返回‘class'__main__.ClassB',這樣就統(tǒng)一了。
引入新類后,還有其他的好處,比如更多的內(nèi)置屬性將會(huì)引入,描述符的引入,屬性可以來(lái)計(jì)算等等。
為了向前兼容,默認(rèn)情況下用戶定義的類為經(jīng)典類,新類需要繼承自所有類的基類object或者繼承自object的新類。
值得注意的地方是,雖然使用的是最新的python(2.7),但是一些特性不會(huì)在舊式類起作用。
所以,為了確保自己使用的是新式類,有兩種以下方法:
1.元類,在類模塊代碼的最前面加入如下代碼__metaclass__=classname(自定義的某個(gè)新式類)。
2.類都從內(nèi)建類object直接或者間接地繼承。
如果不需要兼容舊式類,舊版本的類,那么就保持都是新式類。
在Python3里面,不存在這些問(wèn)題了,因?yàn)樗械念惗际莖bject類的子類(隱式)。
代碼示例:
classoldClass:#經(jīng)典類
def__init__(self):
pass
classnewClass(object):#新類
def__init__(self):
pass
c1=oldClass()
c2=newClass()
c1.__class__#輸出->
type(c1)#輸出->
c2.__class__#輸出->
type(c2)#輸出->
以上內(nèi)容為大家介紹了python培訓(xùn)之新式類和舊式類區(qū)別,希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。