- 首頁(yè)|
- 網(wǎng)校|
- 焚題庫(kù)|
- APP |
-
微信公眾號(hào)
python利用“實(shí)例化對(duì)象._父類名__私有屬性”的調(diào)用方法來(lái)調(diào)用私有屬性。方法是:1、創(chuàng)建類并定義私有屬性;2、實(shí)例化類對(duì)象;3、利用“實(shí)例化對(duì)象._父類名__私有屬性”來(lái)調(diào)用私有屬性。
當(dāng)我們定義一個(gè)類的時(shí)候,有時(shí)候會(huì)定義一個(gè)私有屬性來(lái)輔助開發(fā)。在其它語(yǔ)言中經(jīng)常會(huì)用到 private 來(lái)修飾這個(gè)屬性為私有屬性?墒悄阒烂?同樣為私有屬性,有的開發(fā)語(yǔ)言中是真私有屬性,有的是假私有屬性。
例如 :在 OC 開發(fā)過(guò)程中出現(xiàn)的私有屬性就是假私有屬性,通過(guò) runtime 可以很方便拿到私有屬性并進(jìn)行修改。同出師門,swift 中的私有屬性就是真私有屬性,通常需要 private 來(lái)修飾。
那么在 python 開發(fā)中,我們?nèi)绾蝸?lái)定義一個(gè)私有屬性呢?作為約定俗成,我們通常在屬性的前面加兩個(gè)下劃線,即__age就代表是一個(gè)私有屬性。
也許你會(huì)有疑問(wèn),這個(gè)屬性是真私有屬性還是假私有屬性?
首先我們定義一個(gè)類,并在該類中初始化兩個(gè)屬性,其中一個(gè)為私有屬性。如下所示:
class Person(object):
# 構(gòu)造函數(shù)
def __init__(self, name):
self.name = name
self.__age = 18
創(chuàng)建一個(gè)對(duì)象,并給初始化name 屬性。
obj = Person("lily")
print(obj.name)
運(yùn)行該模塊就會(huì)打印出:lily
那么私有屬性該如何訪問(wèn):
print(obj.__age)
運(yùn)行模塊之后,控制臺(tái)會(huì)打印出:
'Person' object has no attribute '__age'
填寫下面表單即可預(yù)約申請(qǐng)免費(fèi)試聽java課程!害怕學(xué)不會(huì)?助教全程陪讀,隨時(shí)解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可全國(guó)推薦就業(yè)!
既然 age作為私有屬性,所以該屬性就不能直接訪問(wèn)。
正確調(diào)用方法為:
print(obj._Person__age)
控制臺(tái)就可以打印出:18
同樣,可以重新給私有屬性賦值
obj._Person__age = 20
print(obj._Person__age)
控制臺(tái)就可以打印出:20
如果我們另外創(chuàng)建一個(gè)類并繼承 Person,該如何訪問(wèn)自己的私有屬性并做修改呢?
class Student(Person):
def __init__(self):
self.__gender = 'male'
stu = Student()
print(stu._Student__gender)
控制臺(tái)會(huì)打印出來(lái):male
如果訪問(wèn)父類的私有屬性呢?
print(stu._Person__age)
這個(gè)時(shí)候,控制臺(tái)會(huì)打。'Student' object has no attribute '_Person__age'
這進(jìn)一步證明了,私有屬性是無(wú)法被繼承的。
由此可知,在 Python 中私有屬性為假私有屬性。那為什么不從語(yǔ)法上保證 private 字段的私密性呢?用最簡(jiǎn)單的一句話來(lái)說(shuō):We are all consenting adults here。正如Python 程序員的觀點(diǎn):開放要比封閉好。
綜上所述:
Python 編譯器無(wú)法嚴(yán)格保證 private 字段的私密性。
只有當(dāng)子類不受自己控制的時(shí)候,才可以考慮使用 private 屬性來(lái)避免名稱沖突。
初級(jí)會(huì)計(jì)職稱中級(jí)會(huì)計(jì)職稱經(jīng)濟(jì)師注冊(cè)會(huì)計(jì)師證券從業(yè)銀行從業(yè)會(huì)計(jì)實(shí)操統(tǒng)計(jì)師審計(jì)師高級(jí)會(huì)計(jì)師基金從業(yè)資格稅務(wù)師資產(chǎn)評(píng)估師國(guó)際內(nèi)審師ACCA/CAT價(jià)格鑒證師統(tǒng)計(jì)資格從業(yè)
一級(jí)建造師二級(jí)建造師消防工程師造價(jià)工程師土建職稱房地產(chǎn)經(jīng)紀(jì)人公路檢測(cè)工程師建筑八大員注冊(cè)建筑師二級(jí)造價(jià)師監(jiān)理工程師咨詢工程師房地產(chǎn)估價(jià)師 城鄉(xiāng)規(guī)劃師結(jié)構(gòu)工程師巖土工程師安全工程師設(shè)備監(jiān)理師環(huán)境影響評(píng)價(jià)土地登記代理公路造價(jià)師公路監(jiān)理師化工工程師暖通工程師給排水工程師計(jì)量工程師
人力資源考試教師資格考試出版專業(yè)資格健康管理師導(dǎo)游考試社會(huì)工作者司法考試職稱計(jì)算機(jī)營(yíng)養(yǎng)師心理咨詢師育嬰師事業(yè)單位教師招聘公務(wù)員公選考試招警考試選調(diào)生村官
執(zhí)業(yè)藥師執(zhí)業(yè)醫(yī)師衛(wèi)生資格考試衛(wèi)生高級(jí)職稱護(hù)士資格證初級(jí)護(hù)師主管護(hù)師住院醫(yī)師臨床執(zhí)業(yè)醫(yī)師臨床助理醫(yī)師中醫(yī)執(zhí)業(yè)醫(yī)師中醫(yī)助理醫(yī)師中西醫(yī)醫(yī)師中西醫(yī)助理口腔執(zhí)業(yè)醫(yī)師口腔助理醫(yī)師公共衛(wèi)生醫(yī)師公衛(wèi)助理醫(yī)師實(shí)踐技能內(nèi)科主治醫(yī)師外科主治醫(yī)師中醫(yī)內(nèi)科主治兒科主治醫(yī)師婦產(chǎn)科醫(yī)師西藥士/師中藥士/師臨床檢驗(yàn)技師臨床醫(yī)學(xué)理論中醫(yī)理論