簡體   English   中英

需要解釋python包和模塊

[英]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.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 ),而不是一類或函數。

可以將import Singleton更改為from Singleton import Singleton ,或者將@Singleton更改為@Singleton.Singleton

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM