封裝訪問限制機制
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多型於多型性 什麼是多型 多...