[英]how to avoid importing self, intra-package relationships
AppCenter/
main.pyw
|
|
_apps/
__init__.py
TabularApp.py
UserAdministrationApp.py
RegisterApp.py
FnAdminApp.py
PyUi/
__init__.py
的内容: import sys
sys.path.insert(1, '.')
__all__ = ['TabularApp',
'UserAdministrationApp',
'RegisterApp',
'FnAdminApp']
当main.pyw尝试from _apps import *
。 在UserAdministrationApp.py
我尝试将工具提示动态添加到某些QListWidget
项目中,如下所示:
for app in self.__APPS__:
app_icon = str(os.path.join(app_icons, f"{app}.png")).replace('\\', '/')
icon = QIcon(app_icon)
if app != self.__class__:
ttip_txt = eval(f'_apps.{app}.__doc__')
else:
ttip_txt = self.__doc__
item = QListWidgetItem(icon, app)
item.setText(app)
item.setToolTip(ttip_txt)
wdg.addItem(item)
self.__APPS__
只是_apps.__all__
的副本。 我遇到的第一个问题是,我将收到AttributeError
说module x has no attribute y
在ttip_txt = eval(f'_apps.{app}.__doc__')
module x has no attribute y
,这是通过UserAdministrationApp模块中的from _apps import *
解决的。 此时,我已经重命名了该模块以进行测试,并且一切正常,但是当我将名称更改回UserAdministrationApp.py
我又遇到了一个AttributeError
说module __apps has no attribute UserAdministrationApp
。
我尝试阅读python import docs,但其中的任何内容都没有对我说什么。 我感觉到它与试图导入自身的脚本有关。 但是我仍然对这些问题感兴趣:
import _apps
时,为什么在第一种情况下导入失败? ImportError
而不是AtributeError
? 好的,我找到了一个解决方案,尽管我认为它有点脏而且不是最佳样式,但是它可以工作。
from _apps import *
删除,而仅从from _apps import __all__
删除。
在从模块的主类的初始化UserAdministrationApp
import
在一个循环中跳过self.__class_.__name__
self.__APPS__ = _apps.__all__
self.class_name = self.__class__.__name__
for app in self.__APPS__:
if self.class_name != app:
exec(f'import _apps.{app}')
for app in self.__APPS__:
app_icon = str(os.path.join(app_icons, f"{app}.png")).replace('\\', '/')
icon = QIcon(app_icon)
if app != self.class_name:
ttip_txt = eval(f'_apps.{app}.__doc__')
else:
ttip_txt = self.__doc__
找到解决方案后,我仍然想听听为什么出于教育目的首先出现错误。 因此,如果任何人在任何时候都对此有所了解并知道如何...,我们将非常欢迎。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.