2. 封裝
3. property裝飾器
class
person()
:def
__init__
(self,name)
: self.name = name
defspeak
(self)
:pass
a =1print
(a)p1 = person(
'p1'
)print
(p1.name)
p2 = person(
'p2'
)print
(p2.name)
p3 = person(
'p3'
)print
(p3.name)輸出1
p1p2
p3使用了__init__特殊方法的例項物件的建立流程
1.建立乙個變數
2.在記憶體中建立乙個新的物件
3.執行類中的**塊(只執行一次)
4.__init__(self)方法執行了
class 類名(
[父類]):
公共的屬性...
#物件的初始化方法
def__init__
(self,..
...)
: **塊
# 其他的方法
defm1
(self,..
..):
**塊
defm2(self,..
..):
**塊...
..
• 出現封裝的原因:我們需要一種方式來增強資料的安全性
屬性不能隨意修改
屬性不能改為任意的值
• 封裝是物件導向的三大特性之一
注,當在類中只看見getter( )而沒有setter( ),通常代表該資料只能獲取不能修改,若兩者均沒有,注意不要隨意獲取和修改該類裡面的屬性
• 使用封裝,確實增加了類的定義的複雜程度,但是它也確保了資料的安全
• 1. 隱藏屬性名(弱封裝),使其無法隨意的修改物件中的屬性
def
__init__
(self,name)
: self.name = name
修改為def
__init__
(self,name)
self.hidden_name = name
• 2. 增加了getter()和setter()方法,很好控制屬性是否是唯讀的
注,當在類中只看見getter而沒有setter,通常代表該資料只能獲取不能修改• 3. 使用setter()設定屬性,可以增加資料驗證,確保資料的正確性
class
dog():
def__init__
(self,age)
: self.hidden_age = age
defget_age
(self)
:return self.hidden_age
defset_age
(self,age)
:# 此處可以增加一些邏輯語句增加資料正確性
if age >0:
self.hidden_age = age
d = dog(8)
d.set_age(-5
)print
(d.gat_age())
輸出8
• 4. 使用getter()方法獲取屬性,使用setter()方法設定屬性可以在讀取屬性和修改屬性的同時做一些其他的處理
與上述程式類似的,可在setter()方法裡新增一些邏輯語句或者其他所需語句• 5. 可以為物件的屬性使用雙下劃線開頭 __***。雙下劃線開頭的屬性,是物件的隱藏屬性,隱藏屬性只能在類的內部訪問,無法通過物件訪問
• 隱藏屬性只不過是python自動為屬性改了乙個名字 --> _類名__屬性名 例如 __name -> _person__name
• 這種方式實際上依然可以在外部訪問,所以這種方式我們一般不用。一般我們會將一些私有屬性以_開頭
• 一般情況下,使用_開頭的屬性都是私有屬性,沒有特殊情況下不要修改私有屬性
class
person
:def
__init__
(self,name)
: self._name = name
# property裝飾器 用來將乙個方法轉換為物件的屬性
@property
defname
(self)
:print
('getter方法執行了'
)# 這是乙個getter()方法
return self._name
# setter方法的裝飾器 @屬性名.setter
@name.setter
defname
(self,name)
: self._name = name
p = person(
'ben'
)p.name =
'lalala'
#此處使用賦值形式,區別於之前使用p.set_name(str)
print
(p.name)
輸出getter方法執行了
lalala
12 物件導向
面向過程 物件導向思想 對於描述複雜的事務,為了巨集觀上把握,從整體上合理分析,我們需要使用物件導向的思路來分析整個系統。但是,具體到微觀操作,仍然需要面向過程的思路去處理 物件導向程式設計 oop 物件導向程式設計的本質就是 以類的方式組織 以物件的組織 封裝 資料 抽象 把共同點剝離抽取出來 三...
筆記12 物件導向
物件導向 q 小明同學讀 三國 a 找物件 什麼是物件?在客觀世界中可以描述的物品 看得見,摸得著 小明 是什麼?人 人類中的乙個物件 三國 是什麼?書 書籍類中的乙個物件 在計算機中如何能夠描述小明和三國 string name 小明 int age char 可以讀書的 string booln...
12 Go物件導向
儘管go中沒有封裝 繼承 多型這些概念,但可以通過別的方式實現這個特性 封裝 通過方法實現 繼承 通過匿名字段實現 多型 通過介面實現 package main import fmt type person struct 方法 func p person display type stduent s...