定義私有成員:
class stu1():
def __init__(self, name, age):
self.name = name
# self.age = age
self.__age = age # 外部無(wú)法直接訪問(wèn) 內(nèi)部可以訪問(wèn)
def getname(self):
return self.name
def getage(self): # 內(nèi)部可以訪問(wèn)
return self.__age
man = stu1('joe', '18')
print(man.name)
# print(man.age) # 外部不能直接訪問(wèn)
print(man.getage()) # 但是可以間接訪問(wèn)
類的私有字段成員:
class stu2():
val = 'smith'
__val2 = 'smith2' # 前面加雙下劃線 私有化
def __init__(self):
pass
def show(self):
print(stu2.__val2)
@staticmethod
def stat(): # 靜態(tài)方法可以沒(méi)有參數(shù)
return stu2.__val2
man = stu2()
print(man.val)
man.show() # 可以通過(guò)內(nèi)部函數(shù)調(diào)用私有字段
# print(man.__val2) # 外部不能直接調(diào)用
print(man.stat()) # 可以通過(guò)靜態(tài)方法調(diào)用私有字段
類的私有方法:
class stu3():
def __f1(self): # 函數(shù)名前面加雙下劃線,是私有函數(shù)
return 18
def f2(self):
return self.__f1()
man = stu3()
print(man.f2()) # 但是可以通過(guò)類內(nèi)的方法調(diào)用類內(nèi)的私有函數(shù)
# man.__f1() 外部不能直接調(diào)用 類的私有函數(shù)
要點(diǎn):
self: 類內(nèi)方法的第一個(gè)參數(shù)一定是self,self代指代用該方法的中間人,實(shí)例化的對(duì)象。
self.name=name: 可以在構(gòu)造函數(shù)內(nèi)寫一些字段,利用self.name = name 實(shí)現(xiàn)封裝,外部無(wú)法直接訪問(wèn),只有內(nèi)部可以訪問(wèn)。可以利用內(nèi)部函數(shù)間接訪問(wèn)。
__ name: 字段如果前面加雙下劃綫,就是該字段私有化,只有內(nèi)部函數(shù)可以調(diào)用,外部不能直接調(diào)用。
@staticmethod: 如果函數(shù)前加 @staticmethod 就是聲明該函數(shù)是一個(gè)靜態(tài)方法,靜態(tài)方法可以沒(méi)有參數(shù)。靜態(tài)方法可以被對(duì)象調(diào)用。
__f(): 函數(shù)如果前面加雙下劃線,就是該函數(shù)私有化,同樣,只有類內(nèi)函數(shù)可以調(diào)用該函數(shù),外部無(wú)法直接調(diào)用,對(duì)象也無(wú)法調(diào)用。
本站文章版權(quán)歸原作者及原出處所有 。內(nèi)容為作者個(gè)人觀點(diǎn), 并不代表本站贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé),本站只提供參考并不構(gòu)成任何投資及應(yīng)用建議。本站是一個(gè)個(gè)人學(xué)習(xí)交流的平臺(tái),網(wǎng)站上部分文章為轉(zhuǎn)載,并不用于任何商業(yè)目的,我們已經(jīng)盡可能的對(duì)作者和來(lái)源進(jìn)行了通告,但是能力有限或疏忽,造成漏登,請(qǐng)及時(shí)聯(lián)系我們,我們將根據(jù)著作權(quán)人的要求,立即更正或者刪除有關(guān)內(nèi)容。本站擁有對(duì)此聲明的最終解釋權(quán)。