【发布时间】:2011-09-19 20:13:45
【问题描述】:
我正在编写我的第一个 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
我已经多次阅读手册的模块部分,但我不太明白。为什么这不起作用?
有没有比手册更清晰/不同的模块/包教程?
【问题讨论】:
-
为什么
ConfigSystem是模块名和类名?这不会令人困惑吗?你能改变其中一个名字吗?它几乎可以消除您的'module' object is not callable错误。 -
尝试“从单例导入单例”。您导入的 Singleton 不是一个类,而是一个模块。这就是您的错误消息所说的内容。
-
@scphantm 嘿,这是 my 单例实现。 Character for character。 :D 我很高兴你发现它很有用,但要注意:如果你以后想从那个单例继承它就行不通了。
-
是的,保罗,我在这里找到了它。仍在尝试习惯一个文件中的多个类。在专门从事 java 工作 9 年后,对于 python 之类的东西来说,这是一个相当大的变化。
标签: python