晚上好,我需要一個建議,谷歌搜索我找不到合適的方向。如果從程式中作為參考我想要的類的物件的方法呼叫,我需要使方法僅在類中可用(即其他方法或函式):
- 對智能感知不可見/不可用的方法
- 如果我很固執,無論如何都要撰寫代碼,則必須引發錯誤。
附上截圖,讓大家看得更清楚。任何建議表示贊賞,謝謝。
問題截圖
uj5u.com熱心網友回復:
python中沒有私有方法。常見用法要求在只應在內部使用的方法之前加上一個或兩個下劃線,具體視情況而定。請參閱此處:物件名稱前的單下劃線和雙下劃線是什么意思?
uj5u.com熱心網友回復:
正如其他人所提到的,Python 中沒有私有方法。我也不知道如何讓它對智能感知不可見(可能有一些設定),但理論上你可以做的是:
import re
def make_private(func):
def inner(*args, **kwargs):
name = func.__name__
pattern = re.compile(fr'(.*)\.{name}')
with open(__file__) as file:
for line in file:
lst = pattern.findall(line)
if (lst and not line.strip().startswith('#')
and not all(g.strip() == 'self' for g in lst)):
raise Exception()
return func(*args, **kwargs)
return inner
class MyClass:
@make_private
def some_method(self):
pass
def some_other_method(self):
self.some_method()
m = MyClass()
# m.some_method()
m.some_other_method()
It ( make_private) 是一個裝飾器,基本上當您呼叫它正在裝飾的函式時,它首先逐行讀取整個檔案,并嘗試查找是否在所有檔案中呼叫此方法時不帶前綴self.。因此,如果不是,則認為它是從類外部呼叫的,并且Exception會引發an (可能會向其添加一些訊息)。
一旦你有多個檔案,問題就可能開始,如果他們真的想要的話,這不會完全阻止某人呼叫它,例如,如果他們這樣做:
self = MyClass()
self.some_method()
但大多數情況下,這會引發例外。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/391229.html
