資料結構 02 Python類

2021-10-03 08:15:24 字數 3382 閱讀 4118

1、定義python類時要不要加括號?:

在 python2 中,對 object 的繼承需要顯式地寫為 frenchdeck(object);

而在 python 3 中,這個繼承關係是預設的,所以可加可不加,加的話object可寫可不寫。

2、與python變數類似,不用顯式的說明class有哪些屬性,賦值時會自動建立:

3、對於複雜的抽象,資訊隱藏的意義很重要,有些語言為此設定了專門的機制,:

python內部沒有沒有服務於這種需求的機制,只能靠一些程式設計約定。例如:

3.1 以下劃線開頭的屬性或者方法都當做內部使用,不應該在類外呼叫。

3.2 以雙下劃線開頭,但不以兩個下劃線結尾的名字做了特殊處理,使得類外不可呼叫。

4、特殊方法(需要記憶):

如果類需要定義特殊方法,例如+、-、*、/等運算,需要在類中採用特殊方法名,例如__add__(self, other)、submulmodfloordivtruediv

druediv:就是/浮點除法

floordiv:就是//整除運算子

補充:1、比較大小的關係特殊方法:

相等:eqne

大於:gtge

小於:ltle

補充:2:轉化為字串輸出,這樣在類外使用print函式時候,會自動呼叫該特殊方法。

defstr(self):

print(『自定義形式』)

1、乙個類定義確定了乙個名字空間:,位於類體裡面的定義都區域性於這個類體,這些區域性名字在類外看不到,不會和外面的名字衝突。

2、類可以定義在程式裡的任何地方,與函式類似,可以把類定義到乙個函式裡面或者乙個類裡面,但一般定義在模組最外層,這樣類在整個模組都可以用,而且可以通過import被引用。

3、類裡面定義的變數和函式統稱為屬性,用點號可以訪問。

4、類可以沒有init函式,這樣在例項化時建立空物件,然後逐步增加屬性,但不推薦使用。

5、python允許在類中的任意方法中給類建立屬性並賦值,但一般都在init完成

python方法的第乙個引數不一定為self,這是一種習慣寫法。

6、假設c為類,p為例項,m為方法,a,b為引數,那麼c.m(p,a,b)==p.m(a,b)

7、如果需要在方法中呼叫類中的其他方法(或者遞迴呼叫),就需要通過self引數,例如在f中呼叫g:self.g(…)

靜態方法和類方法::

如前所述,靜態方法與定義的類沒有本質的聯絡,但是可以為該類服務,引數列表不應該有self,函式需加修飾符@staticmethod。類方法:用classmethod修飾,類相當於乙個固定的地方(老窩),乙個類可以例項化若干個物件,一般用類方法實現與本類所有物件相關的操作,例如可以做乙個計數器,然後每次例項化物件,計數器加1,最後可以用類訪問屬性的方式呼叫類方法。

1、python有乙個最基本的內建類:object,如果乙個類沒有說明基類,就自動以object作為基類。內建函式issubclass可以判斷是否有繼承關係,如果2是1的基類,那麼issubclass(class1, class2)返回true。

假如b繼承於a,那麼b的例項物件也是a的例項物件。

2、派生類通常需要重新定義init函式,並在裡面呼叫基類的初始化函式以便可以訪問基類的所有資料屬性。,所以常見的派生類定義方式為:

note:變數繼承→呼叫基類初始化必須用基類名,基類的第乙個引數必須為self。

基類方法呼叫有兩種方式:,1、用baseclass.methodname()的方式呼叫基類函式。2、用self.method的方式呼叫。區別在於當某個方法被重寫時,第一種方式呼叫的是基類方法,第二種方式呼叫的是派生方法。

3、靜態約束和動態約束::

關於方法查詢:分為沒有衝突和有衝突,當向上面這樣存在衝突時:定義上面兩個類,如果y是c的例項,那麼y.f()返回什麼呢?如果返回b被呼叫則稱為靜態繫結,如果返回c被繫結則成為動態繫結,python為動態繫結語言。當不存在衝突時,那麼將從直接從派生類開始層層向基類搜尋。

4、內建標準函式super():

正規化:super(類,例項).方法(引數)

分為帶引數和不帶引數呼叫兩種方式。

不帶引數的呼叫:當定義某個派生類的方法時,呼叫super函式例如:

super().m(…),那麼就會從基類開始去查詢函式m。

帶引數的呼叫:任何場景下,super(c, obj).m(…),就會直接從c類中查詢,當然要求obj為c的乙個例項,找到m後將用obj作為self引數。

值得提出的是super是面向函式的,不一定是初始化函式,別的函式也可以這樣。

異常也具有類的層次結構,當需要定義自己的異常類是需要先選擇乙個父類,然後從他派生。

正規化:python中try/except/else/finally語句的完整格式如下所示:

```python

try:

normal execution block

except a:

exception a handle

except b:

exception b handle

except:

other exception handle

else:

if no exception,get here

finally:

print("finally")

>note:a\b是定義的錯誤類,else、finally為可選,只有正常執行才會進入else,無論異

常都會進入finally,如果異常是a而又有except,那麼a的handle資訊會被蓋掉,所以

慎用except。

2.5 類定義例項:學校人事管理

02python基礎 函式,類

建構函式 類 class student 類名一般為首字母大寫,駝峰原則 def init self,name,score self必須位於第乙個引數 self.name name self.score score def say score self self必須位於第乙個引數 print 的分數...

python 指南(02)python基礎

1.python程式是大小寫敏感的 2.python使用縮進來組織 塊,請務必遵守約定俗成的習慣,堅持使用4個空格的縮排 3.在文字編輯器中,需要設定把tab自動轉換為4個空格,確保不混用tab和空格 關於變數賦值a python 中的除法 python 中運算子 python中整數和浮點數均沒有大...

02 Python基本資料型別

1.1 表示式表示式是由數字 算符 數字分組符號 括號 自由變數和約束變數等以能求得數值的有意義排列方法所得的組合 表示式一般僅僅用於計算一些結果,不會對程式產生實質性的影響,如果在互動模式中輸入乙個表示式,直譯器會自動將表示式的結果輸出,例如1 2就是乙個表示式 1.2 語句乙個語法上自成體系的單...