如何訪問私有成員

2022-06-30 11:09:11 字數 2005 閱讀 5284

# ### 如何訪問私有成員

class plane():

# 公有屬性

captain = "馬軍強"

# 私有屬性

__air_sister = "20個"

# 公有繫結方法

def fly(self):

print("飛機會飛")

# 公有普通方法

def fly2():

print("飛機會飛2")

# 私有的繫結方法

def __oil_info(self):

print("飛機百公里油耗是100公升")

# 私有的普通方法

def __oil_info2():

print("飛機百公里油耗是100公升")

# 公有的繫結方法

def pub_info(self):

print(self.__air_sister)

self.__oil_info()

# 公有的普通方法

def pub_info2():

print(plane.__air_sister)

plane.__oil_info2()

# (1)如何訪問類的私有成員?

'''利用公有方法呼叫類內的私有成員

私有成員在本類之內可以隨便呼叫,在本類之外不能呼叫

'''# 例項化物件 方法一

obj = plane()

obj.pub_info()

# 也可以使用類來呼叫 方法二

plane.pub_info2()

# (2)如果就想直接在類外呼叫私有成員,有辦法麼?

'''私有成員的改名策略:

_類名 + 私有成員 (沒有真正的私有化,類外可以通過改名策略仍然調取.)

'''print("<===>")

print(obj._plane__air_sister)

plane._plane__oil_info2()

# ### 如何刪除成員

# (1)例項化的物件刪除公有成員屬性和方法

obj = plane()

print(obj.__dict__)

print(obj.captain)

'''captain 成員屬性歸屬於class plane的,不是obj的

obj可以有使用權,沒有所有權(不能夠修改或者刪除類內的屬性)

如果物件有該屬性方法,先優先呼叫該物件裡面的成員,

如果沒有,在呼叫類中的成員屬性和方法

如果都沒有,直接報錯.

'''# 刪除物件的屬性

obj.captain = "熊衛華"

print(obj.__dict__)

print(obj.captain)

del obj.captain

print(obj.captain) # obj自己的captain 被刪除了

# 刪除物件的方法

print("<*****=>")

obj.fly111222 = lambda : print("我的飛機可以潛入海底")

obj.fly111222()

print(obj.__dict__)

# del obj.fly

# print(obj.__dict__)

# (2)定義的類刪除公有成員屬性和方法

'''物件可以呼叫類中得公有成員屬性方法

類不能呼叫物件的相關成員屬性和方法

方向不可逆.

乙個類可以產生多個物件,多個物件彼此之間,資料獨立

'''# 刪除類的成員屬性

# del plane.captain

# print(plane.captain)

# print(obj.captain)

# plane.fly111222() error 類不能呼叫物件的方法

# 刪除類的成員方法

# del plane.pub_info

# plane.pub_info() error 不存在

成員函式訪問物件私有成員

在類的定義過程中,成員函式可以訪問傳遞過來的 同類物件 的所有成員 可以訪問私有成員 可以這樣理解 類是在編譯階段就存在的概念,物件是在執行階段才存在的。c 的私有判斷是在編譯時間決定的,因此c 的私有只能是基於類的,不是基於物件的。封裝是編譯期的概念,是針對型別而非物件的,在類的成員函式中可以訪問...

如何訪問私有成員變數和函式

一說到修改 delphi 原始碼或者訪問物件的私有成員函式,很多人馬上可以說出種種危害來否定我。這種做法我也提倡,但是有時候如果可以靈活運用,可以解決由於 delphi 因為封裝不正確而帶來的問題。我在這裡分享一些技巧 1.訪問私有成員變數 如果是 protected 的變數,可以用如下方法訪問 t...

在類外如何訪問私有成員

1 通過公共函式為私有成員賦值 class test void sety int b void printxy void int main 2 利用指標訪問私有資料成員 class test void sety int b void getxy int px,int py int main 3 利用...