雙下劃線
今天閱讀**時碰到了命令列解析的類,對大量的下劃線感到絕望,系統學習
單下劃線可作為變數使用,此時它佔了引數的位置卻無法被呼叫,適用於必須要輸出或輸入的無用引數
是程式設計師約定的指定私有變數和方法,指定的成員、屬性只在類內可用,(其實可以被呼叫)
但在引入類的時候,如from module import *
時,本來所有子函式都該被呼叫,但是命名為「_xx」的函式和變數不會被引入
如想定義乙個class、def變數,可以寫作class_
這個和單下劃線不同,它所命名的成員確定無法被呼叫,它有以下幾個屬性
1)該成員無法被外部以原來的名字直接呼叫,但可以通過"類名._類名__xx
「被外部呼叫,內部以」self.__xx
"引用
class test():
def __method(self):
return 42
def call_it(self):
return self.__method
print(test().call_it())
print(test().__method())
結果
42
traceback (most recent call last)
: file "d:/test.py"
, line 9,in
print
(test(
).__method())
attributeerror:
'test'
object has no attribute '__method'
print(test()._test__method())
結果
42
2)類內部,未通過self定義的"__xx
",可以按照 「_類名__xx
」 在外部引用修改,在類內引用名可以為 「__xx
」 或 「_類名__xx
」 。這一點注意和self定義的"__xx"區分
_test__method=5
class test():
def __init__(self):
self.__method=6
def call_it(self):
return self.__method
def call_that(self):
return __method
def call_what(self):
return _test__method
print(test()._test__method)
print(test().call_it())
print(test().call_that())
print(test().call_what())
結果
665
5
python內部約定的特殊命名,官方建議不要使用它們當作變數名
如__init__
,__add__
等
另外,「__xx__
」這樣的變數是可以不經「_類名__xx__
」的修飾,直接被外部呼叫的,如
class test():
def __init__(self):
self.__me__=6
print(test().__me__)
結果
6
Python單下劃線和雙下劃線
python 用下劃線作為變數字首和字尾指定特殊變數。不能用 from moduleimport 匯入 系統定義名字 類中的私有變數名 核心風格 避免用下劃線作為變數名的開始。因為下劃線對直譯器有特殊的意義,而且是內建識別符號所使用的符號,我們建議程式設計師避免用下 劃線作為變數名的開始。一般來講,...
Python 單下劃線和雙下劃線解析
單下劃線 單下劃線開始的成員變數叫做保護變數,意思是只有類物件和子類物件自己能訪問到這些變數 雙下劃線 開始的是私有成員,意思是只有類物件自己能訪問,連子類物件也不能訪問到這個資料。如下列所示 以單下劃線開頭 foo 的代表不能直接訪問的類屬性,需通過類提供的介面進行訪問,不能用 from impo...
Python中單下劃線和雙下劃線
python中存在一些特殊的方法,有些方法以雙下劃線 開頭和結尾,它們是python的魔法函式,比如 init 和 str 等等。不用要這種方式命名自己的變數或者函式。class a def init self,text self.text text def str self return self...