新式類和舊式類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
把這個賦值語句放在類模塊代碼的最前面 __metaclass__ = type(前面有提過)。方法
本身的類都從內建類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)