為了加強記憶,將Jerry老師授課的內(nèi)容,讀了三遍,還是不能完全明白,只能用笨方法,一個字母一個字母碼出來,來增加記憶,也方便以后學(xué)習(xí)。
1、特殊方法
def__init__(self,name):
2、封裝
封裝的引入:
封裝是面向?qū)ο笕筇卣髦?/p>
是隱藏對象中一些不希望被外部訪問到的屬性或方法
如何隱藏屬性?將對象的屬性名,修改成一個外部不知道的名字
如何獲?。ㄐ薷模ο笾械膶傩?/p>
需要我們提供一個getter和setter方法訪問屬性和修改屬性
使用封裝,確實增加了類定義的復(fù)雜程度,但他也確保了數(shù)據(jù)的安全
1、隱藏了屬性名,使調(diào)用者無法隨意修改對象的屬性
2、增加了getter和setter方法,很好的控制了屬性是否是只讀的
如果希望屬性只讀,則可以直接去掉setter方法
如果希望屬性不能被外部訪問,則可以直接去掉getter方法
3、是用setter方法設(shè)置屬性,可以增加數(shù)據(jù)的驗證,確保數(shù)據(jù)的值是正確的
4、使用getter方法和setter方法獲取和設(shè)置屬性的時候,可以在讀取屬性和修改屬性的時候做一些其他
class dog:
def__init__(self,name):
??? self.hidden_name = name
def speak(self):
??? print(‘大家好,我是%s’%self.hidden_name)
def get_name(self):
???#get_name()來獲取對象的name 屬性
??? Return self.hidden_name
Def set_name(self,name):
#set_name()來修改對象的name屬性
self.hidden_name =name
d = dog(‘大黑背’)
# d.name = ‘二哈’
# d.hidden_name = ‘大狼狗’
# d.speak()
Print(d.get_name())
Class Car():
# name= ‘xxx’
# color= ‘xxx’
def __init__(self,name,color):
self,name = name
self.color = color
def run(self):
print(‘汽車開始跑了……’)
def laba(self):
print(‘%s 滴滴滴滴………’$self.name)
c = Car(‘大奔’,’白色’)
封裝二
#對對象的屬性使用雙__下劃線開頭
#雙下劃線屬性是對象的隱藏屬性,隱藏屬性只能在類的內(nèi)部訪問,無法通過對象訪問
#隱藏屬性只不過是python自動為屬性修改了一個名字
#實際上將修改的名字改為__類名__屬性名 例如__name –>_person __name
#一般我們會將一些私有的屬性(不希望被外部訪問) 以__開頭
class Person :
def__init__(self,name):
??? self._name = name
def get_name(self):
??? return self._name
defset_name(self,name):
3、property?裝飾器
# property將方法轉(zhuǎn)換為相同名稱的只讀屬性
@ property
def get name(self):
#print(‘get 方法執(zhí)行了’)
Return self._name
#這個是setter方法 setter 方法的裝飾器 @屬性名.setter
@name.setter
def name(self,name = name):
self._name = name
p = Person(‘葫蘆娃’)
p.name = ‘超人’
print(p.name)
#print(p.name())? #p.name() =葫蘆娃--> p.name = ‘葫蘆娃’
#print(p.name)
class Demo:
?def __init__(self):
self.name = "rose"
?@property
?def test(self):
?print(self.name)
?d = Demo()
?d.test # 通過@property以 普通屬性 形式 訪問 普通?法
注意:以上@property只相當于?個只讀屬性,也就是說,僅能訪問test函數(shù)的內(nèi)容。
需求:
1.通過傳參去改變self.name的值
?2.刪除掉self.name