1. 程式人生 > >python基礎學習日誌day6-類的經典類vs新式類

python基礎學習日誌day6-類的經典類vs新式類

blog 學習 obj 父類 day6 廣度 auth () Coding

經典類VS新式類區別

1)寫法
新式類
class Person(object):#new style
經典類
class Persion: #classical style

2)調用父類
新式寫法用super
經典類直接寫父類類名


3)多繼承時繼承順序python3使用的是廣度查詢,所以兩個都一樣。

經典類python2是深度查詢。所以經典類python2多繼承是有BUG class D(B,C) D--》B--》A--C

# -*- coding:utf-8 -*-
__author__ = shisanjun

class A:
    def __init__(self):
        self.n 
= A class B(A): # def __init__(self): # self.n = ‘B‘ pass class C(A): def __init__(self): self.n = C class D(B,C): # def __init__(self): # self.n = ‘D‘ pass obj = D() print(obj.n)

註:新式類py2和py3結果:都是調用 obj.n先類D中找self.n如果沒有,在B中找self.n,如果沒有在C中找self.n,如果還是沒有在A中找self.n(廣度優先)

  經典類py3:都是調用 obj.n先類D中找self.n如果沒有,在B中找self.n,如果沒有在C中找self.n,如果還是沒有在A中找self.n(廣度優先)

  經典類py2: obj.n先類D中找self.n如果沒有,在B中找self.n,如果沒有在A中找self.n,如果還是沒有在C中找self.n (深度優先),這是有BUG的。

python基礎學習日誌day6-類的經典類vs新式類