如何在私人功能中使用?
私人功能到公共?
def __print(str):
print(str)
class Test():
def print(self, str):
# global __print (same NameError)
__print(str)
t = Test()
t.print("Hi")
NameError:未定義名稱“_Test__print”
uj5u.com熱心網友回復:
沒有“私有函式” Python 并沒有真正的訪問修飾符。
如果你想表明一個函式不是公共介面的一部分,通常會使用一個下劃線:
def _print(str_):
print(str_)
class Test:
def print(self, str_):
# No error! Idiomatic!
_print(str_)
t = Test()
t.print("Hi")
這將是這樣做的慣用方式。Python 程式員會認識到這一點。
您的代碼的問題是您使用了兩個下劃線。因此,現在,無論何時您嘗試在類定義中使用該識別符號,該識別符號都會被編譯器破壞。兩個下劃線用于名稱修飾。這存在的唯一目的是防止子類中的名稱沖突。基本上它會破壞在類定義的背景關系中定義的所有名稱:
表單的任何識別符號
__spam(至少兩個前導下劃線,最多一個尾隨下劃線)在文本上替換為_classname__spam,其中 classname 是當前類名,前導下劃線被剝離。只要它出現在類的定義中,就無需考慮識別符號的句法位置,就可以完成這種修飾。
你可以只使用:
_Test__print
所以:
class Test:
def print(self, str_):
# No error! Idiomatic!
_Test__print(str_)
你可以(但不應該,并且應該只使用一個下劃線)執行以下操作:
def __print(str_):
print(str_)
class Test:
pass
def print(self, str_):
# global __print (same NameError)
__print(str_)
Test.print = print
del print # since we polluted the global namespace
t = Test()
t.print("Hi")
你可以想出任何方式的變通方法,關鍵是,你不應該這樣做。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/451577.html
標籤:Python python-3.x
