python之物件導向程式設計 六 封裝

2021-10-10 08:25:59 字數 1842 閱讀 4707

封裝是物件導向程式設計的乙個重要概念。它是指將類中部分屬性和方法加以隱藏與保護,使其只能在類內部使用而不能被外部直接訪問。

封裝最重要的優點有2條:一是提高了資料安全性、二是提高了**健壯性。

在類內部定義的變數前加雙下劃線即表示該變數是私有的,外部不能直接訪問。

class

user

: __private =

'secret'

def__print()

:print

(f'不能告訴你'

)

加了雙下劃線的變數為啥不能從類的外部呼叫?請認真觀察private和print兩個變數:

class

user

: __private =

'secret'

def__print()

:print

(f'不能告訴你'

)print

(user.__dict__)

out:

類內部定義雙下劃線開頭的變數會被python自動轉換成 單下劃線類名 雙下劃線 變數名。在類外部不能定義私有變數,即類外部定義雙下劃線開頭的變數不會被自動轉換。所以在類外部直接訪問私有變數會報錯。在類內部可以直接訪問私有變數。

另外知道python封裝原理後,在類外部實際上還是可以直接訪問私有變數,案例如下:

class

user

: __private =

'secret'

def__print()

:print

(f'不能告訴你'

)print

(user._user__private)

user._user__print(

)out:

secret

不能告訴你secret

但是強烈建議不要在類外部直接訪問類內部的私有屬性,這樣做破壞了封裝的規則,不利於資料安全性和**健壯性。

運用封裝的有很多,下面舉乙個小案例:

class

user

:def

__init__

(self, name, password)

: self.name = name

self.__password = password

defchgpwd

(self)

: pwd =

input

('請輸入舊密碼:'

)if pwd == self.__password:

pwd1 =

input

('請輸入新密碼:'

) pwd2 =

input

('請再輸入一次:'

)if pwd1 == pwd2 and

len(pwd1)

>=6:

self.__password = pwd1

return

false

return

true

n1 = user(

'張三'

,'123456'

)while n1.chgpwd():

print

('密碼修改失敗,請重試!'

)

在上述**中,__password是私有屬性,不能直接修改!若要修改必須通過chgwd()方法,在該方法中有驗證舊密碼和重複新密碼的功能,確保修改密碼合規。在多人配合的專案中封裝是不可或缺的手段。經常用來驗證輸入的資料值是否合理等等。

python之物件導向程式設計

物件導向的程式設計的核心是物件 上帝式思維 要理解物件為何物,必須把自己當成上帝,上帝眼裡世間存在的萬物皆為物件,不存在的也可以創造出來。物件是特徵和技能的結合,其中特徵和技能分別對應物件的資料屬性和方法屬性。優點是 解決了程式的擴充套件性。對某乙個物件單獨修改,會立刻反映到整個體系中,如對遊戲中乙...

Python之物件導向程式設計

類和物件 類是抽象的模板,比如我們抽象乙個學生類,很容易想到學生固有的一些屬性,比如名字,年齡等等,建立乙個學生類 class student object pass 複製 這裡的object是表明student類是從哪個類繼承來的,在python中object是所有類的父類 繼承的概念下文會提及 ...

python之物件導向程式設計

當使用 類名 實參 建立例項物件時,python直譯器的主要處理過程包括兩大步 首先會查詢該類物件是否實現了特殊方法 new 如果沒有實現,則去其父類中依次查詢,直到類物件object。class parent object def new cls,args,kwargs pass class ch...