python中的oop其實就是在已連線命名空間物件內尋找屬性而已。
類名大寫!盡量
類內部的方法,通常新增乙個單一下劃線的字首。
class語句一般形式:
class (superclass,...):
data = value
def method(self,...):
self.member = value
方法呼叫
instance.method(args... ...)
會被自動翻譯為一下形式的類方法函式呼叫
class.method(instance,args... ...)
這兩種呼叫形式在python中都有效。
如果要保證子類的建構函式也會執行超類構造時的邏輯,一般都必須通過類明確呼叫超類的__init__方法:
class super:
def __init__(self,x):
...default code...
class sub(super):
def __init__(self,x,y):
super.__init__(self,x)
...custom code ...
如果沒有這樣的呼叫,子類會完全取代超類的建構函式。
可以分別使用特殊的類語法來實現/定義抽象基類:
python3.0
from abc import abcmeta,abstractmethod
class super(metaclass=abcmeta):
@abstractmethod
def method(self,...):
pass
python2.6:
class super:
__metaclass__=abcmeta
@abstractmethod
def method(self,...):
pass
不管哪種方法,效果都是相同的——我們不能產生乙個例項,除非在類樹的較低層級定義了該方法。
因為python中沒有型別宣告,所以python中的多型是基於物件介面的。
如果通過引數列表進行過載方法,如:
class c:
def method(self, x):
...def method(self, x, y, z):
...
這樣的**是會執行的,但是,只有最後乙個定義才會起作用(就像x=1,然後x=2,結果x將是2)
class語句內開頭有兩個下劃線,但結尾沒有兩個下劃線的變數名,會自動擴張,從而包含了所在類的名稱。
例如,像spam類內__x這樣的變數名會自動程式設計_spam__x; 原始的變數名會在頭部加入乙個下劃線,然後是所在類名稱。
可以避免多重繼承時可能導致的命名衝突。用的不多。
在class語句內,首行括號內可以列出乙個以上的類。當這麼做時,就是在使用所謂的多重繼承:類和其實例繼承了列出的所有超類的變數名。
python 面 python面精彩試題100
所有的變數都可以理解是存中乙個物件的 引用 或者,也可以看似c中 void 的感覺。這裡記住的是型別是屬於物件的,而不是變數。而物件有兩種 可更改 mutable 與 不可更改 immutable 物件。在 python 中,strings,tuples,和numbers 是不可更改的物件,而 li...
python基礎15 面像物件的程式設計
物件導向的程式設計 一 物件導向的程式設計簡介 1 物件導向程式設計的由來。我們之前雖然學習過了面向過程的程式,它的核心是面向過程,一步一步的設計好了的流程,雖然極大的降低了程式的複雜度,但是乙個設計 好了的流程只能滿足乙個程式後期的可擴充套件性差,所以為了解決面向過程的程式可擴充套件性差的缺點,產...
python面試經典題 Python經典面試題
1 邏輯運算子的運算 and or not 優先順序,not and or print not 2 1 and 3 4 or 4 5 and 2 1 and 9 8 or 7 6 f x or y x true,則返回x print 1 or 2 1 print 3 or 2 3 print 0 o...