gpt4 book ai didi

python - 需要python包和模块的解释

转载 作者:行者123 更新时间:2023-11-28 22:04:17 28 4
gpt4 key购买 nike

我正在编写我的第一个 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.')

现在,使用我的配置系统类,如果我正确阅读手册,这应该可以工作

import Singleton


@Singleton
class ConfigSystem:

但是我得到了

TypeError: 'module' object is not callable

我已经多次阅读手册的模块部分,但还是不太明白。为什么这不起作用?

有没有比手册更清楚/不同的模块/包教程?

最佳答案

您需要将 import Singleton 更改为 from Singleton import Singleton(或者按照 Alex 的建议将 @Singleton 更改为 @Singleton。单例

通常,您应该使用限定导入来避免 namespace 冲突,例如,import SomeModule 调用 SomeModule.SomeClass 或为简洁起见,调用 import SomeModule作为 SM 调用 SM.SomeClassSM.some_function 而不是从模块导入所有内容,例如 from SomeModule import * .

您有名称冲突,其中 Singleton 指的是模块(例如,Singleton.py 是类/函数/变量集合的文件)而不是Singleton 类(class Singleton(object))。具体来说,在你的装饰器中 @Singleton Singleton 指的是模块(你 import some_modulefrom some_module import a_class_or_object ) 而不是类或函数。

关于python - 需要python包和模块的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7476742/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com