Python OOP總結

來源:互聯網
上載者:User

python的物件導向的設計和c++等編譯語言不同,主要注意的是:

  1. python的類沒有存取權限的問題,也就是說所有的變數都是可訪問的。
    實際上python有私人的機制,就是在屬性前加__,但是這種私人機制實際上也是偽私人,因為它其實是用一個別名來儲存這個屬性。
    例如在類A中的self.__a = 4, 實際上__a被修改成了_A__a保持在類中了。
  2. 沒有static的說法了,類和執行個體是區分看待的,一個屬性或者方法可以屬於類也可以屬於執行個體。

    看下面的例子

    class A:
        i = 'class var'
        def __init__(self):
            self.i = 'instance var'

    a = A()
    print A.i, a.i

    #result class var instance var

    類和執行個體之間的元素和函數都是獨立的。
    當然如果你要定義屬於類的方法,因為舊的對象定義強制方法是要帶self參數的,不然調用會出錯的,所以需要static函數,可以這樣做:

    class A:
        i = 'class var'
        def __init__(self):
            self.i = 'instance var'
        def f(): pass
        f = staticmethod(f)

     

     

  3. 類和執行個體中的屬性和方法實際上都是放在類和執行個體自身的一個字典中,就是__dict__中,所以他們實際上可以看成不同的兩個東西。
    類本身也是對象,所以類和執行個體都可以在程式中的任何地方進行添加,修改和刪除。對的你甚至可以用del來刪除類中的屬性和函數。
  4. 那麼當你需要使用類或者執行個體中的屬性和方法時,python是如何尋找的呢?
    python中的所有的類和執行個體將會根據他們的繼承關係組成一個對象屬性樹。
    樹的葉子節點是執行個體,內部節點根據類之間的繼承關係來決定。
    當使用A.a的方法來尋找一個節點中的某個元素時,它將在這棵樹上進行搜尋,如果當前節點沒有該元素則向上繼續搜尋直到根節點,如果向上的過程中出現兩條以上路徑(想想為什麼有這種情況),則從左邊向上走,如果到根節點還沒有找到,那麼返回到出現分叉的點再往右一條路向上。
    這種尋找方法即使出現了多重繼承(其實就是上面說的兩條以上路徑)也不用擔心出現C++中的情況。

    大概就這些,我發現大部分面試時候還是考的這種我第4點中說的,所以其實想明白很重要。。而且我認為這種方法還是相當優雅滴~~

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.