python面對物件理解 封裝 詳細版二

2021-10-08 17:21:51 字數 2124 閱讀 5481

•特殊方法都是形如__***__()這種形式 如:__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...