python學習筆記(二十六)經典類和新式類的區別

2022-09-15 20:36:18 字數 1468 閱讀 8071

首先了解一下什麼是經典類,什麼是新式類
class

person: #經典類

pass

class person2(object

): #新式類

pass

#類名首字母都大寫

#在python3裡面經典類和新式類沒有任何區別

經典類與新式類在python3中是沒有任何區別的,主要區別是在python2中多繼承的時候。

區別:經典類是:深度優先

新式類是:廣度優先

在python3裡面都是廣度優先

下面我們舉例子來說明:

class

a: #這樣定義a是經典類

def x(self):

print('a

')class

b(a):

# def x(self):

# print('b

')pass

class

c(a):

def x(self):

print('c

')class

d(b,c):

pass

s =d()

s.x()

class a(object

): #這樣定義a是新式類

def x(self):

print('a

')class

b(a):

# def x(self):

# print('b

')pass

class

c(a):

def x(self):

print('c

')class

d(b,c):

pass

s =d()

s.x()

以下分析情況都是基於python2

1.這樣定義a類,a是經典類,那麼在繼承後d呼叫x()方法的時候順序是怎樣的呢?

首先是從b類裡面去找x()方法,如果b類中沒有,就會從a類裡面去找,如果a類中也沒有x()方法,最後才會從c類裡面去找;

2.那麼如果a類定義的時候是新式類,那麼在繼承後d呼叫x()方法的時候順序是怎樣的呢?

首先是從b類裡面去找x()方法,如果b類中沒有,就會從c類裡面去找,如果c類中也沒有x()方法,最後才會從a類裡面去找;

畫個比較醜的圖更直觀的說明一下:

Swift學習筆記(二十六) 擴充套件

1.擴充套件的作用 1 使用擴充套件新增屬性 2 使用擴充套件新增方法,可變方法 3 使用擴充套件新增構造器 4 使用擴充套件新增下標 5 使用擴充套件新增巢狀型別 2.擴充套件的特性 1 使用擴充套件新增屬性,方法,可變方法,構造器,下標,巢狀型別 2 可以使乙個已有型別符合乙個或者多個協議 3 ...

學習二十六 雙快取技術

在 react 中,dom 的更新採用可雙快取技術,雙快取技術致力於快速的 dom 更新。什麼是雙快取?舉個例子,使用 canvas 繪製動畫時,在繪製每一幀前都會清除上一幀的畫面,清除上一幀需要花費時間,如果當前幀畫面計算量又比較大,又需要花費比較長的時間,這就導致上一幀清除到下一幀顯示中間會有較...

HTMLCSS學習筆記(二十六) CSS3彈性盒

box sizing 屬性允許您以特定的方式定義匹配某個區域的特定元素。語法 box sizing content box border box inherit 屬性值描述 content box 這是由 css2.1 規定的寬度高度行為。寬度和高度分別應用到元素的內容框。在寬度和高度之外繪製元素的...