Python「類」之訪問限制

2021-09-13 20:30:48 字數 1800 閱讀 4377

要讓內部屬性或者方法不被外部訪問,可以把在屬性或者方法的名稱前加上單下劃線_, 或者在前面加雙下劃線__,或者兩邊加雙下劃線。

其中,在前面和後面都加雙下劃線的是系統的方法,比如 __init__() 方法。

在前面加乙個下劃線的表示保護型別的成員,對於這樣的屬性和方法,只允許類本身和子類可以訪問。

例如:

class swan:

"""天鵝類"""

_neck_swan = "天鵝的脖子很長" # 保護型別的屬性

def __init__(self):

print("__init__(): ", swan._neck_swan) # 訪問保護型別的屬性

swan = swan() # 例項化swan類的例項(物件)

print("直接訪問:", swan._neck_swan) #通過例項名訪問保護型別的屬性

>>> 

__init__(): 天鵝的脖子很長

直接訪問: 天鵝的脖子很長

兩個下劃線開頭的是私有型別的成員,可能是私有型別的屬性或者方法,這樣的方法只允許定義它的類本身可以訪問,我們不能通過類的例項直接訪問,但是可以通過 類的例項名._類名__*** 訪問。

例如:

class swan:

"""天鵝類"""

__neck_swan = "天鵝的脖子很長" # 私有型別的屬性

def __init__(self):

print("__init__(): ", swan.__neck_swan) # 訪問私有型別的屬性

swan = swan() # 例項化swan類的例項(物件)

print("直接訪問:", swan.__neck_swan) #通過例項名訪問私有型別的屬性

>>> 

__init__(): 天鵝的脖子很長

traceback (most recent call last):

file "c:/users/xiangyangdai/desktop/1.py", line 8, in print("直接訪問:", swan.__neck_swan) #通過例項名訪問私有型別的屬性

attributeerror: 'swan' object has no attribute '__neck_swan'

class swan:

"""天鵝類"""

__neck_swan = "天鵝的脖子很長" # 私有型別的屬性

def __init__(self):

print("__init__(): ", swan.__neck_swan) # 訪問私有型別的屬性

swan = swan() # 例項化swan類的例項(物件)

print("間接訪問:", swan._swan__neck_swan) #通過例項名訪問私有型別的屬性

>>> 

__init__(): 天鵝的脖子很長

間接訪問: 天鵝的脖子很長

Python類訪問限制

如果要讓內部屬性不被外部訪問,可以把屬性的名稱前加上兩個下劃線 在python中,例項的變數名如果以 開頭,就變成了乙個私有變數 private 只有內部可以訪問,外部不能訪問 class student object def init self,name,score self.name name ...

類 訪問限制

練習 請把下面的student物件的gender欄位對外隱藏起來,用get gender 和set gender 代替,並檢查引數有效性 coding utf 8 class student object def init self,name,gender self.name name self.g...

python科技限制 python 訪問限制

class person object def run self print self.money print run def eat self,food print eat food def init self,name,age,height,weight,money self.name name...