python 新式類和舊式類

新式類和舊式類python

python的新式類是2.2版本引進來的,咱們能夠將以前的類叫作經典類或者舊類。spa

爲何要在2.2中引進new style class呢?官方給的解釋是:code

爲了統一類(class)和類型(type)。繼承

在2.2以前,好比2.1版本中,類和類型是不一樣的,如a是ClassA的一個實例,那麼a.__class__返回 ‘ class    __main__.ClassA‘ ,type(a)返回老是<type 'instance'>。而引入新類後,好比ClassB是個新類,b是ClassB的實例,b.__class__和type(b)都是返回‘class '__main__.ClassB' ,這樣就統一了。it

引入新類後,還有其餘的好處,好比更多的內置屬性將會引入,描述符的引入,屬性能夠來計算等等。class

爲了向前兼容,默認狀況下用戶定義的類爲經典類,新類須要繼承自全部類的基類 object 或者繼承自object的新類。object

值得注意的地方是,雖然使用的是最新的python(2.7),可是一些特性不會在舊式類起做用。
因此,爲了確保本身使用的是新式類,有如下方法:
meta

  1. 把這個賦值語句放在類模塊代碼的最前面 __metaclass__ = type(前面有提過)。方法

  2. 本身的類都從內建類object直接或者間接地繼承。im

若是不須要兼容舊式類,舊版本的類,那麼就保持都是新式類。
固然,在Python3裏面,不存在這些問題了,由於全部的類都是object類的子類(隱式)。


代碼示例:

class CC:            #經典類
    def __init__( self ):
        pass

class CCN(object):    #新類
    def __init__( self ):
        pass 

c1 = CC()
c2 = CCN()

c1.__class__            # 輸出-> <class __main__.CC at 0x0137BF10>
type(c1)                # 輸出-> <type 'instance'>

c2.__class__            # 輸出-><class '__main__.CCN'>
type(c2)                # 輸出-><class '__main__.CCN'>

dir(c1)
相關文章
相關標籤/搜索