一、 應(yīng)用場(chǎng)景及定義方式
-
1.1、應(yīng)用場(chǎng)景
- 在實(shí)際開(kāi)發(fā)中,對(duì)象 的 某些屬性或方法 可能只希望 在對(duì)象的內(nèi)部被使用,而 不希望在外部被訪問(wèn)到
- 私有屬性 就是 對(duì)象 不希望公開(kāi)的 屬性
- 私有方法 就是 對(duì)象 不希望公開(kāi)的 方法
-
1.2、定義方式
-
在 定義屬性或方法時(shí),在 屬性名或者方法名前 增加 兩個(gè)下劃線,定義的就是 私有 屬性或方法,
self.__age = 18就是私有屬性,而self.age = 18就不是私有屬性,同樣def __secret(self):是私有方法,def secret(self):不是私有方法class Women: def __init__(self, name): self.name = name # 不要問(wèn)女生的年齡 self.__age = 18 def __secret(self): print("我的年齡是 %d" % self.__age) xiaofang = Women("小芳") # 私有屬性,外部不能直接訪問(wèn) # print(xiaofang.__age) # 私有方法,外部不能直接調(diào)用 # xiaofang.__secret()
-
二、偽私有屬性和私有方法
在日常開(kāi)發(fā)中,不要使用這種方式,訪問(wèn)對(duì)象的 私有屬性 或 私有方法
-
Python 中,并沒(méi)有 真正意義 的 私有
在給 屬性、方法 命名時(shí),實(shí)際是對(duì) 名稱 做了一些特殊處理,使得外界無(wú)法訪問(wèn)到
-
處理方式:在 調(diào)用的屬性名或者方法名稱 前面加上
_類名=>_類名__名稱class Women: def __init__(self, name): self.name = name # 不要問(wèn)女生的年齡 self.__age = 18 def __secret(self): print("我的年齡是 %d" % self.__age) xiaofang = Women("小芳") # 私有屬性,外部不能直接訪問(wèn)(加上`_Women`就可以了) # print(xiaofang._ Women__age) # 私有方法,外部不能直接調(diào)用(加上`_Women`就可以了) # xiaofang._Women__secret()提示
print(xiaofang.__age)=>print(xiaofang._ Women__age)
xiaofang.__secret()=>xiaofang._Women__secret()