2020-07-31面向?qū)ο缶幊淌v(特殊方法、封裝、property裝飾器)

為了加強記憶,將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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容