物件導向(三) 組合 封裝

2021-09-30 01:50:24 字數 3478 閱讀 8890

封裝訪問限制機制

property

什麼是組合:

組合指的是乙個物件中,包含乙個或多個物件

為什麼使用組合:

減少**冗餘,降低耦合度

如何使用組合:

繼承:繼承是類與類的關係,子類繼承父類的屬性/方法,子類與父類是一種從屬關係。

組合:組合是物件與物件的關係,乙個物件擁有另乙個物件中的屬性/方法,是一種什麼有什麼的關係

演示:

#人類

class

people

:def

__init__

(self,name,age,***)

: self.name = name

self.age = age

self.*** = ***

#老師類

class

teacher

(people)

:def

__init__

(self,name,age,***)

:super()

.__init__(name,age,***)

#學生類

class

student

(people)

:def

__init__

(self,name,age,***)

:super()

.__init__(name,age,***)

#日期類

class

date

:def

__init__

(self,year,month,day)

: self.year = year

self.month = month

self.day = day

deftell_birth

(self)

:print

(f'''

==出生年月日==

年:月:

日:'''

)stu = student(

'redwei',21

,'male'

)date_obj = date(

1998,4

,7)stu.date_obj = date_obj

stu.date_obj.tell_birth(

)

什麼是封裝

封:比如將乙個小袋子,封起來

裝:比如將一堆小貓小狗和tank裝在袋子裡

封裝指的是可以將一堆屬性和方法,封裝到到物件中

ps:物件就好比乙個『袋子/容器』,可以存放一堆屬性和方法。

ps:存不是目的,取才是目的,可以通過『物件.』的方式獲取屬性或方法

為什麼使用封裝

可以通過『物件.』的方式『存放/獲取』屬性或方法

可以擁有『.』的機制

方便訪問資料

怎麼用封裝

class

user

: x =

10def

func()

:pass

obj = user(

) obj.y =

20 obj---

> x,func,y

什麼是訪問限制機制:

凡是在類內部定義的屬性或方法,以–開頭的屬性或方法名,都會被限制,外部不能直接訪問該屬性的原型。

python特有:凡是在類內部定義–開頭的屬性或方法,都會變形為–類名–屬性/方法。

為什麼要有訪問限制:

將一些隱私的資料,隱藏起來,不讓外部輕易獲取。

可以將一堆資料封裝成乙個介面,可以讓使用者呼叫介面。

並且通過相應的邏輯,最後將資料返回給使用者

如何實現:

class

atm:

def__insert_card

(self)

:print

('插卡'

)pass

def__input_pwd()

:print

('輸入密碼'

)pass

def__input_bal

(self)

:print

('輸入取款金額'

)pass

def__withdraw_cost

(self)

:print

('取款'

)pass

def__print_flow

(self)

:print

('列印回執單'

)pass

defwithdraw

(self)

: self.__insert_card(

)

self.__input_pwd(

)

self.__input_bal(

)

self.__with_cost(

)

self.__print_flow(

)atm_obj = atm(

)#直接呼叫不能拿到資料

#必須通過其他介面

atm_obj.withdraw

什麼是property

property是乙個內建的裝飾器,可以裝飾在類』內部的方法』上.

可以將該方法呼叫方法由–>物件.方法()–>物件.方法

為什麼使用property

在某些場景下,呼叫的方法只是用來獲取計算後的的某個值.

必須通過 物件.方法() 方式呼叫,讓方法看起來像動詞

讓名詞的方法,呼叫時更為合理,目的是為了,迷惑呼叫者,呼叫的方法誤以為是屬性

如何用

class

user

:def

__init__

(self,name,weight,height)

: self.__name = name

self.weight = weight

self.height = height

@property

defbmi

(self)

:return self.weight/

(self.height**2)

@property

defname

(self)

:return self.__name

@name.setter

defname

(self,value)

: self.__name = value

@name.deleter

defname

(self)

:del self.__name

user_obj = user(

'redwei'

,100

,1.65

)print

(user_obj.bmi)

物件導向程式設計 4 組合

和繼承類似,組合也是一種表達類之間關係的方式,也是能夠達到 重用的效果.例如表示乙個學校 public class student public class teacher public class school 組合並沒有涉及到特殊的語法 諸如 extends 這樣的關鍵字 僅僅是將乙個類的例項作...

Chisel Tutorial(三) 組合電路

以下內容依據 2015 7 10 版的chisel 2.2 tutorial整理 組合電路 在chisel 中每個電路都是一些 node 的集合,每個 node 是乙個硬體操作單元,具有0個 1chisel 的資料型別 中介紹的變數就可以認為是乙個0 輸入的node 其輸出是乙個固定值,也就是變數的...

學習日記0821組合 多型 封裝

1 組合 什麼是組合 組合就是有乙個物件它擁有乙個屬性,該屬性是另乙個物件 1 class foo 2pass 3class bar 4pass 5 a foo 6 b bar 7 b.attrd a 為何要使用組合 通過向乙個類新增屬性的方式,可以將兩個類聯絡在一起 2多型於多型性 什麼是多型 多...