[英]Python module overwrite double underscores
有人知道為什么我的__status__
字符串無法打印嗎? 我收到一個NameError
。 但是,如果設置了CAT,它就可以打印CAT(它可以替代)。
所以我不能使用雙下划線,因為它現在是模塊settings_local的魔術屬性?
settings.py
__status__ = "Base"
CAT = 5
try:
# This will work if a settings_local.py exists
from settings_local import *
except ImportError as e:
print "Add a settings_local blah blah"
sys.exit()
print __status__ # returns Base
print CAT # Returns 1
print settings_local.__status__ # Returns NameError
settings_local.py
__status__ = "Development"
CAT = 1
我應該只在settings_local.py中執行此操作嗎?
status = __status__
然后以這種方式使用它?
如果目標模塊沒有__all__
屬性(如果僅導入該屬性中列出的名稱),則from <module> import *
語法將忽略以下划線開頭的名稱。 從import
聲明文檔中 :
如果標識符列表用星號(
'*'
)代替,則模塊中定義的所有公共名稱都將綁定在import
語句的本地名稱空間中。模塊定義的公共名稱是通過檢查模塊名稱空間中名為
__all__
的變量來確定的; 如果已定義,則必須是由該模塊定義或導入的名稱的字符串序列。__all__
中給出的名稱均被視為公開名稱,並且必須存在。 如果未定義__all__
,則公共名稱集將包含在模塊名稱空間中找到的所有名稱,這些名稱不以下划線字符('_'
)開頭 。
(我的大膽強調 )。
此外,您沒有導入settings_local
模塊本身。 之所以拋出NameError
是因為您沒有導入模塊,只有模塊中包含的屬性。 這有效:
import settings_local
print settings_local.__status__
您的其他選擇是:
兩個導入語句:
from settings_local import * try: from settings_local import __status__ except ImportError: # no __status__ defined in the local settings pass
將__all__
列表添加到settings_local.py
模塊:
__all__ = ['CAT', '__status__'] __status__ = "Development" CAT = 1
請注意, Python建議不要創建新的__*__
名稱 :
__*__
名稱的Any
使用,在任何情況下,如果沒有明確記錄的使用,均會受到損壞,恕不另行通知。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.