您好,登錄后才能下訂單哦!
這篇文章主要講解了“python面向對象編程封裝的概念”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“python面向對象編程封裝的概念”吧!
封裝是面向對象編程的一個重要概念。它是指將類中部分屬性和方法加以隱藏與保護,使其只能在類內部使用而不能被外部直接訪問。
封裝最重要的優點有2條:一是提高了數據安全性、二是提高了代碼健壯性。
在類內部定義的變量前加雙下劃線即表示該變量是私有的,外部不能直接訪問。
class User:__private = 'secret'def __print():print(f'不能告訴你{User.__private}')
加了雙下劃線的變量為啥不能從類的外部調用?請認真觀察private和print兩個變量:
class User:__private = 'secret'def __print():print(f'不能告訴你{User.__private}')print(User.__dict__)out:{ '__module__': '__main__', '_User__private': 'secret', '_User__print': <function User.__print at 0x0000026476656280>, '__dict__': <attribute '__dict__' of 'User' objects>, '__weakref__': <attribute '__weakref__' of 'User' objects>, '__doc__': None}
在類內部定義雙下劃線開頭的變量會被python自動轉換成 單下劃線類名 雙下劃線 變量名。在類外部不能定義私有變量,即類外部定義雙下劃線開頭的變量不會被自動轉換。所以在類外部直接訪問私有變量會報錯。在類內部可以直接訪問私有變量。
另外知道python封裝原理后,在類外部實際上還是可以直接訪問私有變量,案例如下:
class User:__private = 'secret'def __print():print(f'不能告訴你{User.__private}')print(User._User__private)User._User__print()out:secret 不能告訴你secret
但是強烈建議不要在類外部直接訪問類內部的私有屬性,這樣做破壞了封裝的規則,不利于數據安全性和代碼健壯性。
運用封裝的有很多,下面舉一個小案例:
class User:def __init__(self, name, password):self.name = name self.__password = passworddef chgpwd(self):pwd = input('請輸入舊密碼:')if pwd == self.__password:pwd1 = input('請輸入新密碼:')pwd2 = input('請再輸入一次:')if pwd1 == pwd2 and len(pwd1) >= 6:self.__password = pwd1return Falsereturn Truen1 = User('張三', '123456')while n1.chgpwd():print('密碼修改失敗,請重試!')
在上述代碼中,__password是私有屬性,不能直接修改!若要修改必須通過chgwd()方法,在該方法中有驗證舊密碼和重復新密碼的功能,確保修改密碼合規。在多人配合的項目中封裝是不可或缺的手段。經常用來驗證輸入的數據值是否合理等等。
感謝各位的閱讀,以上就是“python面向對象編程封裝的概念”的內容了,經過本文的學習后,相信大家對python面向對象編程封裝的概念這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。