從零開始的Python計劃#7.3類(延伸)

7.1和7.2我們從程序和麪向對象的編程開始,更加詳細地瞭解了面向對象設計和麪向對象編程的設計規範,現在我們可以繼續瞭解怎麼應用Python編程環境中的所有這些通用概念。
可以看到,雖然類的概念有些複雜和困難,好處是真的方便,六行代碼就可以創建一個銀行賬戶,還能將用戶分配到銀行賬戶並在最後顯示所有內容。

Python中的類定義

類定義:一組定義類的方法和數據屬性的語句(類似於函數定義,是個相似的概念,但是是不同的語法)

格式:從單詞class開始:
在這裏插入圖片描述
類的名字用首字母大寫,方法和其他python函數定義一樣。(基本上可以定義類中具有任何其他函數定義的任何方法)


self參數:在類中的每個方法中都是必需的---它引用該方法正在處理的特定對象(每次有新方法時,需要用到self。self是編寫函數的方法是指它所存儲的對象)
有一個初始化方法:在創建類的實例時自動執行。初始化方法會初始化對象的數據屬性,並將self參數分配給剛創建的對象。
格式:
在這裏插入圖片描述
類方法除了self還有多個參數。


對象狀態:給定時刻的對象屬性值
方法顯示對象狀態在這裏插入圖片描述
我們可以用這個方法對我的對象進行快照並在給定時刻準確地看到屬性
當對象作爲參數傳遞給print函數和str函數時會自動調用它 (當我們把一個對象放到print函數時,字符串方法被自動調用,我們可以在控制檯看到對象的快照)


實例屬性:屬於類的特定實例,這個屬性是在方法使用self參數創建時創建的。

如果創建了一個類的多個實例,則每個實例都具有自己的一組屬性。

類定義(示例)

這是一個非常簡單的類的例子,我們有一個銀行賬戶,有一個初始化方法取第一個參數並定義了餘額。然後有兩種方法:存款和取款
在這裏插入圖片描述
有一個BankAccount的類,這個銀行賬戶類模擬銀行賬戶,是一個單一的銀行賬戶,init方法接受賬戶餘額的參數。當我們創建一個銀行賬戶實例時,我們給了它存款餘額,它被分配給存款餘額屬性。
def_init_(self,bal): ,我們不只是傳遞self,還有balance。 self.balance = bal ,此類的初始init方法僅獲取一個數字,然後創建該數字並將其分配給balance內部屬性。
如我們之前所說,存款方法把存款存入賬戶。
def deposit_money(self,amount):
self.balance += amouny它把餘額加起來,把總數加起來,
return self.balance,因爲我存了款,賬戶的餘額會加上我存入的數目
取款則是我取出賬戶裏的一定數量,def withdraw_money(self, amount):
如果餘額大於自身,則餘額減去金額,如果沒有足夠的存款,會打印一條錯誤的信息,然後把餘額返還。

----------------------------------------------------------------------

類實例

類可以存儲在模塊中(類似於我們可以存儲函數到模塊,然後導入模塊並調用內部的所有函數)模塊的文件名必須以.py結尾 ; 模塊可以導入到使用該類的程序中。

創建類的新實例,可以調用initializer方法: 格式:輸入實例的名稱,然後分配給它帶括號的類名: 在這裏插入圖片描述
我們可以認爲它是我們創建的新數據類型,是一個確切的類去解決複雜的數據


要使用創建的實例調用任何類方法,使用點符號
當在類中有一些方法需要訪問,用點符號表示它們:
格式:

在這裏插入圖片描述
比如之前的銀行賬戶取款是BankAccount.withdraw()
因爲自參數引用對象的特定實例,該方法將影響此實例。因爲self參數引用 對象的特定實例,調用的方法隻影響這個對象的實例而不是每個對象的實例。 對self的引用會自動傳遞****(比如我已經在我的類定義中寫了self,就不需要再寫self了)

類實例(示例)

再次舉銀行賬戶的例子:
返回我在銀行賬戶中的金額的方法
在這裏插入圖片描述
定義main,
要求用戶輸入一個數據類型爲浮點數的初始餘額,一旦用戶輸入了起始餘額,
我們創造一個bankaccount的實例:bankaccount.BankAccount,
調用實例並使用方法deposit_money來添加200,存下銀行賬戶的錢,
然後打印賬戶的餘額。

訪問器和變異器方法

我們還可以使用訪問器和變異器作爲與實例交互的方法。
對象的數據屬性應該是私有的,爲了確保這一點,要在屬性名前面加下劃線。(當我們確定某件事情是隱私的時候,需要放__,它可以確保沒有衝突並且屬性是私有的。
像我們之前說過的鐘對象,這將使屬性成爲私有屬性:在這裏插入圖片描述
通常所有類的數據屬性都是私有的,並提供訪問和更改它們的方法。

訪問器方法:從類的屬性返回一個值而不更改它。它們是類之外的代碼檢索屬性值的安全方法。(我們可以把它想象是在你的筆記本電腦,它給你讀的權限,但不給寫的權限。就是說有一些方法可以給你一個值,但不讓你改變它)

突變器方法:存儲或更改數據屬性的值

類示例

對於同一個銀行賬戶,這是一個更大的腳本:在這裏插入圖片描述
定義一個有餘額的銀行賬戶,有一個存款和取款的方法,最後得到餘額和設置金額。
另一個相似的代碼:在這裏插入圖片描述
請求用戶輸入,用用戶設置的起始餘額創建賬戶,
存了200,
打印賬戶的餘額,然後打印存儲在裏面的實際金額。

在這裏插入圖片描述
所以輸入餘額200,最後餘額是400。
但是當我試圖在對象實例中打印私有變量時,會得到一個錯誤,因爲銀行賬戶對象沒有屬性餘額(這是私人的)。當我想從外部調用它時,python會覺得因爲是私人屬性所以不存在。從外面看不到,但裏面知道。

貫徹聯繫

(1)

我們有一個銀行賬戶和一個客戶對象,
每個客戶都應該連接到自己的銀行賬戶:在這裏插入圖片描述
關聯通常是通過將一個對象作爲另一個對象的屬性來實現的。(我創建了兩個對象,但是用一個對象作爲另一個對象的屬性)

(2)

在這裏插入圖片描述
有一個Customer類,它有一個init方法來定義名稱和地址,然後有一個方法來設置名稱,一個方法來設置地址,一個獲取名稱的方法,一個獲取地址的方法。(這裏我們必須改變方法和訪問方法,修改內部的數據以訪問它,讓我僅訪問數據)

(3)

在這裏插入圖片描述
有一個Customer的類,
創建一個BankAccount類,將導入Customer類,
(進入代碼可以看到class BankAccount基本上是與之前創建的Customer類的關聯。)
init方法接受參數,賬戶餘額,顧客姓名,地址。然後從BankAccount類裏調用Customer類,Customer類封裝在另一個類裏面,
一旦有了amount和self維持着,取款withdraw是自我維持的,
在最後BankAccount類結束時,我們不只能看到所有的銀行資料,也可以讓用戶與客戶的詳細信息交互。

(4)

在這裏插入圖片描述
要求用戶輸入一個起始餘額,名稱和地址,
有效調用BankAccount類,
在餘額中加上200然後打印account。在這裏插入圖片描述
得到的不僅僅是account,還有所有與賬戶相關的客戶信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章