關於Python中的私有屬性和私有方法

2022-07-07 02:18:10 字數 1940 閱讀 3273

python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對物件語言有區別。關於私有屬性和私有方法,有如下要點:

class demo:

__price = 25.8

def __init__(self, u_name, u_age):

self.uname = u_name

self.__uage = u_age

def __age(self):

print("這是私有方法")

print("呼叫共有屬性:", self.uname)

print("呼叫私有屬性:", self.__uage)

print("呼叫私有類屬性:", self.__price)

def name(self):

print("這是公有方法")

print("呼叫共有屬性:", self.uname)

print("呼叫私有屬性:", self.__uage)

print("呼叫私有類屬性:", self.__price)

在 python 中任何東西都是物件,一種資料型別,乙個模組等,都有子集的屬性和方法,除了常用的方法外,其他的你不需要全部記住它,交給 dir() 函式就好了。

d = demo('tom', 18)

print(dir(d))

"""['_demo__age', '_demo__price', '_demo__uage', '__class__', '__delattr__', '__dict__',

'__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__',

'__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__',

'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__',

'__subclasshook__', '__weakref__', 'name', 'uname']

"""

這些列印出來的屬性(方法)是可以直接呼叫的。從列印的結果可以看到,私有屬性 '__age()'、 '__price'、'__uage' 這三個私有屬性(方法)都變成了 '_demo__age', '_demo__price', '_demo__uage',也就可以看出,私有屬性(方法)在python中是不允許直接去呼叫的,類外部可以通過 」_類名__私有屬性(方法)名「 訪問私有屬性(方法)

# 呼叫共有方法

d.name

"""這是公有方法

呼叫共有屬性: tom

呼叫私有屬性: 18

呼叫私有類屬性: 25.8

"""# 呼叫私有方法(錯誤示範)

d.__age()

"""traceback (most recent call last):

file "d:/local/pycharmprojects/private_obj/demo.py", line 32, in d.__age()

attributeerror: 'demo' object has no attribute '__age'

"""# 呼叫私有方法(正確示例)

d._demo__age()

d._demo__

"""這是私有方法

呼叫共有屬性: tom

呼叫私有屬性: 18

呼叫私有類屬性: 25.8

"""# 呼叫私有屬性

print(demo._demo__price) # 25.8

print(d._demo__uage) # 18

python 私有屬性和視為私有屬性

python模組中的視為私有屬性 總的來說,python中有 幾種特殊的屬性 在python模組中,我們經常會見到 x 其中後面兩種 x 是習慣上的私有變數,我們不應該在外部使用它,而是應該通過呼叫內部函式來使用,但這裡是不應該而不是不能,所以要靠我們自覺遵守這個標準,另外,在自定義模組的時候,也要...

python中私有屬性和私有方法,修改私有屬性的值

self.money 1000000子類繼承了父類 如果父類的屬性私有 將不會被子類繼承 私有屬性和私有方法可以在類的裡面使用 自定義類中 如果乙個屬性進行了私有 在類的外面不能呼叫 物件名.屬性名 資料 直接修改 物件名.方法名 間接修改class person object def init s...

python中的私有屬性

我們先來看前置雙下劃線 以前置雙下劃線定義的屬性和方法,例項物件和子類無法呼叫和訪問。首先看看例項物件對於私有方法的訪問許可權 class grandfather def init self self.name grandpa self.age 80 私有屬性 self.money 1000 私有方...