Python核心程式設計 筆記

2021-06-18 15:00:30 字數 1719 閱讀 2768

第13章 物件導向程式設計

object是所有類之母。如果你的類沒有繼承任何其它父類,object將作為預設的父類。

類既可 很簡單,也可以很複雜,這全憑你的需要。最簡單的情況,類僅用作命名空間,意味著,你把資料儲存在變數中,對他們按命名空間進行分級,使他們處於相同的關係空間中。

類成員可以動態新增,這意味著,你不需要在建構函式中將所有的類成員都初始化,另外,也意味著,同乙個類的不同物件,可以不同的類成員(即,每個物件有自己的特有的成員,甚至完全都不相同)。基於此,個人認為在建構函式中將所有的成員顯示的初始化, 是種不錯的習慣。

python中類的建構函式是__init__()成員函式,它至少有乙個引數,這個引數就是self,它代表物件自己,相同於c++中的this指標。所有的成員函式(非靜態函式)都有這個引數,並且需要明確寫出來。但在呼叫時,卻不需要傳遞,此由直譯器完成的。

__init__()成員為例項化物件後呼叫的第乙個成員函式。

每個子類最好定義它自己的建構函式,不然,基類的構造器會被呼叫。然而,如果子類重寫基類的構造器,基類的構造就不會被自動呼叫了——這樣,基類的構造器就必須顯式寫出來才會被執行。注意:在派生類的__init__函式中,呼叫基類的__init__函式時,需要顯式的將self例項物件傳遞給基類構造器。例如:

class caddrbookentry (object):

'address book entry class'

def __init__ (self, nm, ph):

self.name = nm

self.phone = ph

print 'created instance for:', self.name

def updatephone (self, newph):

self.phone = newph

print 'updated phone# for:', self.name

class cempladdbookentry (caddrbookentry):

'employee address book entry class'

def __init__(self, nm, ph, id, em):

caddrbookentry.__init__(self, nm, ph)

self.empid = id

self.email = em

def updateemail (self, newem):

self.email = newem

print 'update e-mail address for:', self.name

python並不支援純虛函式,或者抽象方法。

類的資料屬性,相當於c++中的靜態資料成員,屬於類擁有,而非類的例項所擁有。例如:

class c(obejct):

foo = 100

類擁有乙個靜態資料成員foo。print c.foo將輸出100

python嚴格要求,沒有例項,方法是不能被呼叫的。這種限制即python所描述的繫結概念。方法必須繫結(到乙個例項)才能直接被呼叫。不管是否繫結,方法都是它所在類的固有屬性。

要知道乙個類的有哪些屬性,有兩種方法:

(1)最簡單的是使用dir()內建函式。dir()返回的僅是物件的屬性的乙個名字列表。

(2)通過訪問類的字典屬性__dict__。__dict__返回的是乙個字典,它的鍵是屬性名,鍵值是相應的屬性物件的資料值。

python核心程式設計筆記

1 賦值並不是直接將乙個值賦給乙個變數,儘管你可能根據其它語言程式設計經驗認為應該如此。在python 語言中,物件是通過引用傳遞的。在賦值時,不管這個物件是新建立的,還是乙個已經存在的,都是將該物件的引用 並不是值 賦值給變數。一切皆為物件。python 的賦值語句不會返回值,但可以鏈式賦值。x ...

《python核心程式設計》筆記

建立檔案 maketextfile.py 指令碼提醒使用者輸入乙個尚不存在的檔名,然後由使用者輸入檔案每一行,最後將所有文字寫入文字檔案 1 usr bin env python 2 3 maketextfile.py creat text file 4 5 import os 6 ls os.li...

Python 核心程式設計 筆記三

1 字典是python中唯一的對映型別。映像型別中的資料是無序排列的。字典是作為可變的哈係表實現的。2 字典操作 建立字典 訪問字典 dict for key in dict print r r n key,dict key age 22 name joe male dict dictcp dict...