要背的內容
只要繼承object類就是新式類
不繼承object類的都是經典類
在python3中 所有的類都繼承object類,都是新式類經典類:在py3中不存是,在py2中不主動繼承object的類
在py2中
class a:pass #經典類
class b(object):pass#新式類
在py3中
class a: #pass #新式類
class b(object):pass #新式類
在單繼承方面(無論是新式類還是經典類都是一樣的)
class a:
def func(self):pass
class b(a):
def func(self):pass
class c(b):
def func(self):pass
class d(c):
def func(self):pass
d = d()
尋找某乙個方法的順序:d->c->b->a
越往父類走,是深度
多繼承
class a:
def func(self):
print('a')
class b(a):
def func(self):
print('b')
class c(a):
def func(self):
print(c)
class d(b,c):
def func(self):
print('b')
print(d.mro()) #只在新式類中有,經典類沒有
d = d()
d.func()
在走到乙個點,下乙個點既可以深度走,也可以從廣度走的時候,總是先走廣度,再走深度,廣度優先
在經典類總,都是深度優先,總是在一條路走不通之後再換一條路,走過的點不會再走了
演算法內容:
如果是單繼承 那麼總是按照從子類->父類的順序來計算查詢順序
如果是多繼承 需要按照自己本類,父類1的繼承順序,父類2的繼承順序
merge的規則:如果乙個類出現在從左到右所有順序的最左側,並沒有在其他位置出現,那麼先提出了作為繼承順序中的乙個 或 乙個類出現在從左到右順序的最左側,並沒有在其他順序出現那麼先提出了作為繼承順序中的第乙個
如果從左到右第乙個順序中的第乙個類出現在後面且不是第乙個,那麼不能提取,順序向後繼續找其他順序中父類上述條件的類
類的繼承和掃瞄順序
類的掃瞄原則 01先進後遠 02以誰的身份宣告的變數就在誰的掃瞄 向上掃瞄 繼承 子類可以繼承基類的公有成員和受保護的成員不能繼承私有成員,私有成員只能在聲他們的類和結構體中使用.掃瞄情況有 1.以子類身份宣告的變數並用子類物件賦值,先在自己身上掃瞄,如果有並且是用virtual關鍵字修飾的,就向下...
java 繼承類載入順序
package xu.jin class insect static static int print string str static int x1 print static insect class hello extends insect static public static void ...
類連線 繼承中類載入的順序
繼承中,類載入的順序 1 父類的靜態 塊,子類的靜態 塊 2 父類的初始化塊,父類的構造方法 3 子類的初始化塊,子類的構造方法 public class importantdemo system.out.println 開始了 system.out.println main new test1 b...