[英]need an explanation of python packages and modules
我正在寫我的第一個python腳本,這個包/模塊的東西讓我發瘋了。 讓我們從我的文件夾布局開始
builder.py
-buildModule\__init__.py
-buildModule\AppList.py
-buildModule\BuildClass.py
-buildModule\ConfigSystem.py
-buildModule\MenuSystem.py
-buildModule\Singleton.py
好的,所以我的__init__.py
看起來像這樣
from ConfigSystem import *
from BuildClass import *
from MenuSystem import *
from AppList import *
from buildModule.Singleton import Singleton
現在,我試圖將我的配置系統裝飾為一個單例,所以我的單例看起來像
class Singleton:
def __init__(self, decorated):
self._decorated = decorated
def Instance(self):
try:
return self._instance
except AttributeError:
self._instance = self._decorated()
return self._instance
def __call__(self):
raise TypeError(
'Singletons must be accessed through the `Instance` method.')
現在,使用我的configsystem類,如果我正確閱讀了手冊,這應該可以工作
import Singleton
@Singleton
class ConfigSystem:
但我越來越
TypeError: 'module' object is not callable
我已經閱讀了手冊的模塊部分幾次,而我還不太了解。 為什么這不起作用?
是否存在某個模塊/軟件包教程,其編寫的內容與手冊相比更清晰/不同?
您需要將import Singleton
更改為from Singleton import Singleton
(或如Alex建議將@Singleton
更改為@Singleton.Singleton
。
一般來說,你應該使用合格的進口,以避免命名空間沖突,例如, import SomeModule
與像一個電話SomeModule.SomeClass
或簡潔類似import SomeModule as SM
與像呼叫SM.SomeClass
或SM.some_function
而不是從一個模塊中導入一切如from SomeModule import *
。
您遇到名稱沖突,其中Singleton
是指模塊(例如, Singleton.py
是包含類/函數/變量的集合的文件),而不是Singleton類( class Singleton(object)
)。 具體而言,在你的裝飾@Singleton
Singleton
是指模塊(你import some_module
或from some_module import a_class_or_object
),而不是一類或函數。
可以將import Singleton
更改為from Singleton import Singleton
,或者將@Singleton
更改為@Singleton.Singleton
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.