Python高階 封裝

2021-10-14 01:23:08 字數 2986 閱讀 8717

繼承、封裝、多型

封裝對外部隱藏資訊,不能隨意訪問/修改物件的資料、方法

通過限制類的屬性和方法的訪問方式,實現「封裝」

封裝的三個層次

類的封裝:外部可以任意訪問/修改類中的屬性和方法

私有屬性:外部不可以訪問/修改類的屬性或方法

公有方法+私有屬性:外部有條件限制的訪問/修改屬性,呼叫方法

封裝的表現

類的定義:將某些特定屬性和方法進行 「隔離」

每個學生有自己的年齡,外部可以通過物件任意讀取或修改

class

student

:def

__init__

(self, name, age)

: self.name = name

self.age = age

s1 = student(

"李白",18

)s2 = student(

"杜甫",20

)print

(s1.age)

s1.age =

200# 可隨意更改

print

(s1.age)

屬性私有:兩個下劃線開頭的屬性就是私有屬性。私有屬性只能在類的內部使用,外部不能使用。

不讓外部讀取/修改學生的年齡。

class

student

:def

__init__

(self, name, age)

: self.name = name

self.__age = age # 使用2個下劃線開頭的屬性,定義為私有屬性

s1 = student(

"李白",18

)# print(s1.__age) # 外界無法直接通過屬性名來訪問

# __dict__

print

(s1.__dict__)

# 檢視s1的所有屬性

print

(s1._student__age)

# 可通過_student__age 訪問私有屬性

【 私有屬性 + 公有方法】

私有屬性 + 公有方法:可以實現「有限制條件的開放給外部」,例如:可以讀取年齡,但是不能隨意修改年齡。

class

student

:def

__init__

(self, name, age)

: self.name = name

self.__age = age

defgetage

(self)

:return self.__age

defsetage

(self, age):if

0< age <=

130:

self.__age = age

else

:print

("不能隨意修改"

)s1 = student(

"李白",18

)print

(s1.getage())

s1.setage(

200)

print

(s1.getage(

))

封裝的常用(簡化)寫法

裝飾器的概念:以@開頭,呼叫另乙個函式(或方法),擴充套件了對「所修飾方法」的功能。

property裝飾器修飾的屬性用來返回屬性值;還可以繼續進行setter的設定,用來設定屬性值。

class

dog:

@property

defbark

(self)

:print

("汪汪"

)return

"return值"

d = dog(

)s = d.bark

print

(s)

簡化student

class

student

:def

__init__

(self, name, age)

: self.name = name

self.__age = age

@property

defage

(self)

:return self.__age

@age.setter

defage(self, age):if

0< age <=

130:

self.__age = age

else

:print

("不能隨意修改"

)s1 = student(

"李白",18

)print

(s1.age)

s1.age =

20print

(s1.age)

使用 @property 裝飾器時,方法名不必與屬性名相同.

可以更好地防止外部通過猜測私有屬性名稱來訪問

凡是賦值語句,就會觸發set方法。獲取屬性值,會觸發get方法

擴充套件

# 私有方法,可以在類內部使用

# 可以有條件的開放給外部

class

student

:def

talk

(self, identity)

:if identity ==

"鐵子"

: self.__tellsecrect(

)else

:print

("speak..."

)def

__tellsecrect

(self)

:print

("..."

)s = student(

)s.talk(

"鐵子"

)

Python高階 類之封裝

封裝 第乙個層面的封裝 類就是麻袋,這本身就是一種封裝第二個層面的封裝 類中定義私有的,只有在類的內部使用,外部無法訪問 第三個層面的封裝 明確區分內外,內部的實現邏輯,外部無法知曉,並且為封裝到內部的邏輯提供了乙個訪問介面給 外部使用 封裝的本質是為了明確的區分內外部。python約定 約定一 任...

Javascript 高階 封裝

js中處處是物件,物件導向的第一步當然就是封裝了。由於js中沒有類的概念,所以封裝起來也比較麻煩。以下介紹兩種js的封裝。1 使用約定優先的原則,將全部的私有變數以 開頭 看完 是不是有種被坑的感覺。只把全部的變數以 開頭,事實上還是能夠直接訪問的,這能叫封裝麼。當然了。說了是約定優先嘛,這樣的方式...

Python高階 3 1再議 封裝 繼承 多型

封裝 繼承 多型 是物件導向的3大特性 使用函式來開發,示例 如下 使用物件導向來開發,示例 如下 好處在使用面向過程程式設計時,當需要對資料處理時,需要考慮用哪個模板中哪個函式來進行操作,但是當用物件導向程式設計時,因為已經將資料儲存到了這個獨立的空間中,這個獨立的空間 即物件 中通過乙個特殊的變...