python学习笔记 day25 封装
生活随笔
收集整理的這篇文章主要介紹了
python学习笔记 day25 封装
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 封裝
廣義面向對象的封裝是為了代碼的保護,只讓自己的對象調用自己的方法;
狹義的封裝是把屬性,方法隱藏起來,只供內部調用,不讓外部調用;
?
1. 私有屬性--- 在類內部使用__私有屬性名 來定義一個私有屬性
class Person():def __init__(self,name,password):self.name=name # 定義普通屬性self.__password=password # 定義私有屬性 person=Person('xuanxuan',123) print(person.name) try:print(person.password) # 直接在外部調用私有屬性是不可以的! except Exception as error:print("password是私有屬性,外部不可以直接調用",error)運行結果:
?
那到底可不可以有一種方式調用在類內部定義的私有屬性呢~其實私有屬性在類內部定義時會自動在前面加上_類名,也就是在外部必須使用_類名__私有屬性名才可以調用私有屬性;
class Person():def __init__(self,name,password):self.name=name # 定義普通屬性self.__password=password # 定義私有屬性 person=Person('xuanxuan',123) print(person.name) print(person.__dict__) # 可以查看此時person對象的變量,包括私有屬性__password到底被偽裝成了什么形式(_類名__私有變量名) print(person._Person__password) # 在類內部定義的私有屬性會被自動轉成_類名__私有屬性名,所以在類外面調用時,需要注意調用方式?
運行結果:
?
?在類內部定義的私有屬性會在前面自動加上_類名~,但是原則上不建議在類外部使用這種方式(_類名__私有變量名)去調用類內定義的私有屬性(私有屬性只有在類內定義才有效)
?
?2. 私有方法:
class Person():def __init__(self,name,password):self.name=nameself.__password=password # 定義私有屬性def __getpassword(self): # 定義私有方法return self.__passwordperson=Person('xuanxuan',123) print(person._Person__password) # 在外部可以通過_類名__私有屬性名來查看私有屬性(但是不建議這么做) print(person._Person__getpassword()) # 在內部定義的私有方法其實也被自動轉成_類名__私有方法名,所以可以通過這種方式調用類內的私有方法(不建議這么做) print(Person.__dict__) # 可以查看Person類中的所有變量(普通屬性,私有屬性,私有方法,普通方法)運行結果:
發現其實類內定義的私有方法,也會被自動在前面加上_類名,所以在外部可以使用_類名__私有方法名來調用類內的私有方法(也不建議)
?
3. 靜態私有屬性
class Person():__key='對密碼的編碼方式' # 靜態私有屬性,比如說要對用戶的密碼以某種方式編碼(但又不希望外部看見,雖然外部也可以使用某種方式看見)def __init__(self,name,password):self.name=nameself.__password=password # 定義私有屬性 外部可以使用_類名__私有屬性名進行調用,當然對屬性的調用前面肯定要加實例化的對象名 對象名._類名__私有屬性名def __getpassword(self): # 定義私有方法return self.__password # 可以在私有方法中調用私有屬性def func(self):self.__getpassword() # 注意雖然私有屬性或者私有方法都是在前面加上__雙下劃線,但是它們又會在類內被自動加上_類名;# 但是別忘了調用方法或屬性都是對象在調用,前面必須要加上對象名啊~ person=Person('璇璇',123) print('調用類內的靜態私有屬性:',person._Person__key) # 在類外部查看類內定義的靜態私有屬性 print('調用類內定義的私有屬性:',person._Person__password) # 在類外部調用類內定義的私有屬性 print('調用類內定義的私有方法:',person._Person__getpassword()) # 在類外部查看類內定義的私有方法運行結果:
?
轉載于:https://www.cnblogs.com/xuanxuanlove/p/9682653.html
總結
以上是生活随笔為你收集整理的python学习笔记 day25 封装的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 升级python2至python3解决依
- 下一篇: python 获取子目录下的所有文件的路