小猿圈python學習 三特性之封裝

2021-09-25 08:00:07 字數 1397 閱讀 7877

封裝可以被認為是乙個保護屏障,防止該類的**和資料被外部類定義的**隨機訪問。

要訪問該類的**和資料,必須通過嚴格的介面控制。

封裝最主要的功能在於我們能修改自己的實現**,而不用修改那些呼叫我們**的程式片段。

適當的封裝可以讓程式碼更容易理解與維護,也加強了**資料的安全性。

封裝的優點

良好的封裝能夠減少耦合。

類內部的結構可以自由修改。

可以對成員變數進行更精確的控制。

隱藏資訊,實現細節。

【封裝原則】

將不需要對外提供的內容都隱藏起來;

把屬性都隱藏,提供公共方法對其訪問。

私有變數和私有方法

在python中用雙下劃線開頭的方式將屬性隱藏起來(設定成私有的)

私有變數

class a:

__n = 0 # 類的資料屬性就應該是共享的,但是語法上是可以把類的資料屬性設定成私有的如__n,會變形為_a__n

definit(self):

self.__x = 10 # 變形為self._a__x

def __foo(self): # 變形為_a__foo

print(『from a』)

def bar(self):

self.__foo() # 只有在類內部才可以通過__foo的形式訪問到.

這種自動變形的特點:

1.類中定義的x只能在內部使用,如self.x,引用的就是變形的結果。

2.這種變形其實正是針對外部的變形,在外部是無法通過__x這個名字訪問到的。

3.在子類定義的x不會覆蓋在父類定義的x,因為子類中變形成了:子類名__x,而父類中變形成了:父類名__x,即雙下滑線開頭的屬性在繼承給子類時,子類是無法覆蓋的。

這種變形需要注意的問題是:

1.這種機制也並沒有真正意義上限制我們從外部直接訪問屬性,知道了類名和屬性名就可以拼出名字:類名_屬性,然後就可以訪問了,如a._a__n

2.變形的過程只在類的內部生效,在例項化後再定義的賦值操作,不會變形

私用變數的修改方法舉例

class person(object):

definit(self,name,age):

self.name = name

self.age = age

self.__life_val = 100

def got_attack(self): # 只能通過方法去修改私有變數

self.__life_val -= 20

print(「got attack …,life val drops 20, got %s left…」 %self.__life_val)

p = person(「jack」,22)

p.got_attack()

python小猿 小猿圈python學習 內建函式

python的len為什麼你可以直接用?肯定是直譯器啟動時就定義好了 每個函式的作用我都幫你標好了 abs 求絕對值 all return true if bool x is true for all values x in the iterable.if the iterable is empty...

小猿圈python學習 流程控制之while迴圈

上節課我們已經學會用if else 來猜年齡的遊戲啦,但是只能猜一次就中的機率太小了,如果我想給玩家3次機會呢?就是程式啟動後,玩家最多可以試3次,這個怎麼弄呢?你總不會想著把 複製3次吧。age of oldboy 48 guess int input if guess age of oldboy...

小猿圈python學習 函式的遞迴

求100不斷除以2直到商為0為止,列印每次除的商 用迴圈實現 n 100 while n 0 n int n 2 print n 輸出 如果用函式,如何實現呢?def calc n n int n 2 print n if n 0 calc n 呼叫自己 calc 100 在函式內部,可以呼叫其他函...