Python OOP总结
生活随笔
收集整理的這篇文章主要介紹了
Python OOP总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
面試的時候被問到幾次python的OOP都掛了,決定認真的學一遍~~
python的面向對象的設計和c++等編譯語言不同,主要注意的是:
實際上python有私有的機制,就是在屬性前加__,但是這種私有機制實際上也是偽私有,因為它其實是用一個別名來保存這個屬性。
例如在類A中的self.__a = 4, 實際上__a被修改成了_A__a保持在類中了。
看下面的例子
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函數,可以這樣做:
????i?=?'class?var'
????def?__init__(self):
????????self.i?=?'instance?var'
????def?f():?pass
????f?=?staticmethod(f)
?
類本身也是對象,所以類和實例都可以在程序中的任何地方進行添加,修改和刪除。對的你甚至可以用del來刪除類中的屬性和函數。
python中的所有的類和實例將會根據他們的繼承關系組成一個對象屬性樹。
樹的葉子節點是實例,內部節點根據類之間的繼承關系來決定。
當使用A.a的方法來查找一個節點中的某個元素時,它將在這棵樹上進行搜索,如果當前節點沒有該元素則向上繼續搜索直到根節點,如果向上的過程中出現兩條以上路徑(想想為什么有這種情況),則從左邊向上走,如果到根節點還沒有找到,那么返回到出現分叉的點再往右一條路向上。
這種尋找方法即使出現了多重繼承(其實就是上面說的兩條以上路徑)也不用擔心出現C++中的情況。
大概就這些,我發現大部分面試時候還是考的這種我第4點中說的,所以其實想明白很重要。。而且我認為這種方法還是相當優雅滴~~
?
轉載于:https://www.cnblogs.com/kakafei/archive/2010/11/03/1866666.html
總結
以上是生活随笔為你收集整理的Python OOP总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java集合(一)、什么是Java集合?
- 下一篇: C#中使用委托、接口、匿名方法、泛型委托