83 私有屬性和私有方法 實現封裝

2021-10-09 11:49:53 字數 3182 閱讀 8898

python對於類的成員沒有嚴格的訪問控制限制,這與其他物件導向語言有區別。關於私有 屬性和私有方法,有如下要點:

通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public)。

類內部可以訪問私有屬性(方法)類外部不能直接訪問私有屬性(方法)

類外部可以通過「_類名__私有屬性(方法)名」訪問私有屬性(方法)

【注】方法本質上也是屬性!只不過是可以通過()執行而已。所以,此處講的私有屬性和公 有屬性,也同時講解了私有方法和公有方法的用法。如下測試中,同時也包含了私有方法和 公有方法的例子。

# 測試私有屬性、私有方法

# 基本用法

class

employee

:# 公務員的意思

__company =

"海賊王"

# 私有類屬性. 通過 dir 可以查到 _employee__company

def__init__

(self, name, age)

: self.name = name

self.__age = age # 私有例項屬性

in [2]

: e = employee(

'onepis',26

)in [3]

: e.name

out[3]

:'onepis'

# print(e.age) # 這裡 就訪問 不了 了

in [4]

: e.age--

----

----

----

----

----

----

----

----

----

----

----

----

----

----

----

----

----attributeerror traceback (most recent call last)

input-4

-2d0bd5996799

>

in--

-->

1 e.age

attributeerror:

'employee'

object has no attribute 'age'

in [5]

: e._employee__age # 這種方式 訪問 私有屬性

out[5]

:26in [6]

:dir

(e)# 檢視所有屬性

out[6]

:['_employee__age'

,'_employee__company'

,'__class__'

,'__delattr__'

,'__dict__'

,'__dir__'

,'__doc__'

,'__eq__'

,'__format__'

,'__ge__'

,'__getattribute__'

,'__gt__'

,'__hash__'

,'__init__'

,'__init_subclass__'

,'__le__'

,'__lt__'

,'__module__'

,'__ne__'

,'__new__'

,'__reduce__'

,'__reduce_ex__'

,'__repr__'

,'__setattr__'

,'__sizeof__'

,'__str__'

,'__subclasshook__'

,'__weakref__'

,'name'

]in [7]

: e.__dict__ # 檢視 我們自己定義的屬性

out[7]

:

class

employee

:# 公務員的意思

__company =

"海賊王"

# 私有類屬性. 通過 dir 可以查到 _employee__company

def__init__

(self, name, age)

: self.name = name

self.__age = age # 私有例項屬性

def__work

(self)

:# 私有函式

print

('好好工作,賺錢娶媳婦兒'

)print

('年齡:'

.format

(self.__age)

)# 自己的 東西自己 當然 可以使用 ,私有屬性,私有方法

print

(employee.__company)

in [10]

: e = employee(

'onepis',26

)in [11]

: eout[11]

:<__main__.employee at 0x6c51fd0

>

in [12]

: e.name

out[12]

:'onepis'

in [13]

: e._employee__age

out[13]

:26in [14]

: e._employee__company

out[14]

:'海賊王'

in [15]

: e._employee__work

out[15]

:>>

in [16]

: e._employee__work(

)好好工作,賺錢娶媳婦兒

年齡:26

海賊王

從列印的 person 物件所有屬性我們可以看出。私有屬性「__age」在實際儲存時是按照 「_person__age」這個屬性來儲存的。這也就是為什麼我們不能直接使用「__age」而可以 使用「_person__age」的根本原因。

私有屬性和私有方法

應用場景及定義方式 應用場景 在實際開發中,物件的某些屬性或方法可能只希望在物件的內部使用,而不希望在外部被訪問到 私有屬性 就是 物件 不希望公開的 屬性 私有方法 就是 方法 不希望公開的 方法 定義方法 在定義屬性或方法時,在屬性名或者方法名前增加兩個下劃線,定義的就是私有屬性或方法 clas...

私有屬性和私有方法

應用場景 定義方式 不要問女生的年齡 self.age 18 def secret self print 我的年齡是 d self.age xiaofang women 小芳 私有屬性,外部不能直接訪問 print xiaofang.age 私有方法,外部不能直接呼叫 xiaofang.secret...

私有屬性和私有方法

class student object def init self,name,score 前面帶兩個下劃線表示對變數進行私有化 外部不能隨便的訪問和更改 self.name name self.score score defget grand self print my name is s,my ...