用最直白的語言解釋最複雜的概念,一系列教學讓你在短時間內掌握 Python
前兩篇講完了 繼承(Inheritance)、多型(Polymorphism)跟 抽象類別(Abstract Class),(忘記的朋友可以回去考古一下喔!)今天講一下「封裝(Encapsulation)」,準備好我們就開始吧!
其他物件導向文章:
不再迷茫!手把手的Python入門教學-物件導向初探
不再迷茫!手把手的Python入門教學-繼承
不再迷茫!手把手的Python入門教學-多型、抽象類別
封裝(Encapsulation)
用於防止外部程式碼不當存取類別中的屬性(Attribute)及方法(Method),保護資料安全私有方法
- _ (單個底線):受保護屬性,代表該屬性不應在類別外部直接存取(但你硬要用,不會有人阻止你)
- __ (兩個底線):私有屬性,代表該屬性無法在類別外部直接存取
*名稱改寫:Python會自動把私有屬性名稱改寫成 _類別__屬性
,所以如果真的要存取,可以這樣偷吃步XD
私有屬性 範例

由上述範例可以發現,在第 11 行呼叫類別內的函式是可以成功輸出私有屬性 __age
的,但如果是想要直接在類別外使用就沒辦法,但最後一行把屬性名稱改寫一下就可以了
私有方法
前綴加上 __,只能在類別內部呼叫
*名稱改寫:前面說的偷吃步方法,這裡一樣可以用喔:D
私有方法 範例

可以用 get_info()
這個方法來間接呼叫私有方法 __display_info()
,前面說的名稱改寫也可以成功
屬性裝飾詞(Property Decorators)
一種用方法(Method)包裝屬性讀取與修改的技巧,讓屬性像變數一樣被操作,但其實背後實際執行的是函數邏輯
- @property:Getter,讓方法變成可讀取屬性
- @屬性名.setter:Setter,允許重新設定值
- @屬性名.deleter:Deleter,允許刪除屬性
屬性裝飾詞 範例

加上 @property
會讓這個方法名稱變成屬性,差別在於該屬性不是以變數的形式儲存,而是每次呼叫都會重新執行該類別內的函數,如果沒有 Setter 裝飾詞,那就代表該屬性不能被重新設定,同理 Deleter 也是如此
⚠️這邊要注意!使用該類方法的時候要像在用變數一樣的方式操作,不要寫成 emp.full_name()
,不需要加小括號喔~
喜歡別忘了給我個讚或按下追蹤喔🤗