1. 程式人生 > 程式設計 >python新式類和經典類的區別例項分析

python新式類和經典類的區別例項分析

本文例項講述了python新式類和經典類的區別。分享給大家供大家參考,具體如下:

新式類就是 class person(object): 這種形式的,從py2.2 開始出現的

新式類添加了:

__name__ is the attribute's name.
__doc__ is the attribute's docstring.
__get__(object) is a method that retrieves the attribute value from object.
__set__(object,value) sets the attribute on object to value.

__delete__(object,value) deletes the value attribute of object.

新式類的出現,除了添加了大量方法以外,還改變了經典類中一個多繼承的bug,因為其採用了廣度優先的演算法

Python 2.x中預設都是經典類,只有顯式繼承了object才是新式類
python 3.x中預設都是新式類,經典類被移除,不必顯式的繼承object

貼上一段官網上的作者解釋

python新式類和經典類的區別例項分析

是說經典類中如果都有save方法,C中重寫了save() 方法,那麼尋找順序是 D->B->A,永遠找不到C.save()

程式碼演示:

#!/usr/bin/env python3
#coding:utf-8
'''
  新式類和經典類的區別,多繼承程式碼演示

'''

class A:
  def __init__(self):
    print 'this is A'
  def save(self):
    print 'save method from A'

class B:
  def __init__(self):
    print 'this is B'

class C:
  def __init__(self):
    print 'this is c'
  def save(self):
    print 'save method from C'

class D(B,C):
  def __init__(self):
    print 'this is D'
d = D()
d.save()

結果顯示

this is D
save method from C

注意: 在python3 以後的版本中,預設使用了新式類,是不會成功的

另外: 經典類中所有的特性都是可讀可寫的,新式類中的特性只讀的,想要修改需要新增 @Texing.setter

更多關於Python相關內容感興趣的讀者可檢視本站專題:《Python面向物件程式設計入門與進階教程》、《Python資料結構與演算法教程》、《Python函式使用技巧總結》、《Python字串操作技巧彙總》、《Python編碼操作技巧總結》及《Python入門與進階經典教程》

希望本文所述對大家Python程式設計有所幫助。