•特殊方法都是形如__***__()這種形式 如:__init__
•特殊方法不需要我們呼叫,特殊方法會在特定時候自動呼叫
•
class
person()
:def
__init__
(self, name, age)
: self.name = name
self.age = age #即不用呼叫可自動執行
•封裝是物件導向的三大特性之一(封裝,繼承,多型)
•封裝是指隱藏物件中一些不希望被外部所訪問到的屬性或方法
•可以使用getter()和setter()方法訪問到屬性
• getter() 獲取物件中指定的屬性
• setter() 用來設定物件指定的屬性
class
person()
:def
__init__
(self, name, age)
: self.name = name
self.age = age
defspeak
(self)
:print
('%s的%s說中國話'
%(self.age, self.name)
)def
get_name
(self)
:return self.name
defset_name
(self, name)
: self.name = name
shanxi = person(
'晨曦',18
)shanxi.speak(
)#輸出結果:18的晨曦說中國話
•可以為物件的屬性使用雙下劃線開頭 __***。雙下劃線開頭的屬性,是物件的隱藏屬性,隱藏屬性只能在類的內部訪問,無法通過物件訪問
•一般情況下,使用_開頭的屬性都是私有屬性,沒有特殊情況下不要修改私有屬性
class
person()
:def
__init__
(self, name, age)
: self._name = name
self._age = age
defspeak
(self)
:print
('%s的%s說中國話'
%(self._age, self._name)
)def
get_name
(self)
:return self._name
defset_name
(self, name)
: self._name = name
shanxi = person(
'晨曦',18
)shanxi.__name =
'喜羊羊'
#修改屬性值 修改不成功
print
(shanxi.get_name())
#輸出結果:晨曦
•我們可以使用@property裝飾器來建立唯讀屬性,@property裝飾器會將方法轉換為相同名稱的唯讀屬性,可以與所定義的屬性配合使用,這樣可以防止屬性被修改
class
person
:def
__init__
(self, name)
: self._name = name
@property
defname
(self)
:return self._name
@name.setter
defname
(self, name)
:# @屬性名.setter
self._name = name
p = person(
'葫蘆娃'
)p.name =
'懶羊羊'
#直接使用屬性名修改
print
(p.name)
#直接使用屬性名輸出 輸出結果:懶羊羊
面對物件和封裝
1.成員變數 屬性 在成員方法之外 成員方法 行為 不用static 修飾 使用成員變數 物件名.成員變數名 使用成員方法 物件名.成員方法名 引數 this 當方法的區域性變數和類的成員變數重名,根據 就近原則 優先使用區域性 若需要訪問本類當中的成員變數,格式 this.成員變數變數名 通過誰呼...
面對物件的理解
面向過程思想 第一步做什麼,第二步做什麼 它適合處理一些較簡單的問題 物件導向思想 1 物以類聚,分類的思維模式,思考問題首先會解決問題需要哪些分類,然後對這些分類進行單獨思考。最後,才對某個分類下的細節進行面向過程的思索。2 物件導向適合處理複雜的問題,適合處理需要多人協作的問題。對於描述複雜的事...
python 面對物件 繼承
私有屬性和方法通過在屬性和方法名前新增 得到。私有屬性和方法是物件的隱私,不能通過外界和子類直接訪問 在外界無法訪問到私有屬性和方法 不能直接print列印 可以通過在物件的方法內部訪問私有屬性 子類物件可以通過父類的公有方法間接訪問到私有屬性或私有方法 eg classa def init sel...