__double_leading_and_trailing_underscore__: 名稱前後都有雙底線為特殊物件 (magic object),例如:__init__, __name__,不要自已產生這樣的變數。
__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__)
__name__ 為 __main__,myPy() 及 _myPy1() 也都成功執行。
pyuser@deyu:~/zzz$ python mypy1.py __main__ my first python myPy my first python myPy1
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()
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'?