名稱前後雙底線

  1. __double_leading_and_trailing_underscore__: 名稱前後都有雙底線為特殊物件 (magic object),例如:__init__, __name__,不要自已產生這樣的變數。
  2. mypy.py 程式判斷變數 __name__ 是否為 __main__,也就是執行主程式,不是由其他程式呼叫。
    pyuser@deyu:~/zzz$ vi mypy1.py
    pyuser@deyu:~/zzz$ cat mypy1.py
    #!/usr/bin/python
    
    class _myPy1:
    	def __init__(self):
    		print("my first python myPy1")
    class myPy:
    	def __init__(self):
    		print("my first python myPy")
    
    if __name__ == "__main__":
    	print(__name__)
    	myPy()
    	_myPy1()
    else:
    	print(__name__)
    
  3. 直接執行 mypy.py,印出變數 __name____main__myPy()_myPy1() 也都成功執行。
    pyuser@deyu:~/zzz$ python mypy1.py
    __main__
    my first python myPy
    my first python myPy1
    
  4. 撰寫 test1.py,使用 form mypy import * 從檔案 mypy.py 匯入所有 classes,印出 myPy 的變數 __name__,執行 myPy_myPy1
    pyuser@deyu:~/zzz$ vi test1.py
    pyuser@deyu:~/zzz$ cat test1.py
    #!/usr/bin/python
    
    from mypy1 import *
    
    myPy.__name__
    myPy()
    _myPy1()
    
  5. 執行 test1.py,印出 myPy 的變數 __name__ 為 mypy1,執行 myPy() 正常輸出,但執行 _myPy1() 則出現錯誤。
    pyuser@deyu:~/zzz$ python test1.py
    mypy1
    my first python myPy
    Traceback (most recent call last):
      File "/home/pyuser/zzz/test1.py", line 7, in <module>
        _myPy1()
        ^^^^^^
    NameError: name '_myPy1' is not defined. Did you mean: 'myPy'?