Load module to invoke its decorators(加载模块以调用其修饰器)
本文介绍了加载模块以调用其修饰器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个由多个模块组成的程序字符串,其中一个模块指定各自的Web应用程序处理程序,一个模块指定各自的路由器。
我使用的库可以找到here。
摘自webapp.service
(有更多这样的模块):
from webapp.router import ROUTER
@ROUTER.route('/service/[id:int]')
class ServicePermissions(AuthenticatedService):
"""Handles service permissions."""
NODE = 'services'
NAME = 'services manager'
DESCRIPTION = 'Manages services permissions'
PROMOTE = False
webapp.router
:
ROUTER = Router()
当我导入webapp.router
模块时,webapp.service
模块显然没有运行。因此,@ROUTER.route('/service/[id:int]')
修饰器未运行,我的Web应用程序将失败,并显示相应的路由不可用的消息。
webapp.service
中运行代码以"运行"修饰器的最佳实践是什么?我实际上不需要导入模块本身或其任何成员。
推荐答案
如问题的评论所述, 您只需导入模块即可。至于林特的抱怨,这些都是你的问题中较小的。临时工是来帮忙的--如果他们挡道了,就别听他们的。
因此,让您的应用程序正常工作的简单方法是,根据您的应用程序结构,在__main__.py
或__init__.py
的末尾显式导入使用视图装饰器的所有模块。
如果您有一个短针,请检查如何在导入行上将其静音-这通常是通过在导入行上添加特殊注释来完成的。
Python的自检非常棒,但它找不到类或子类的实例,如果这些实例是在未导入的模块中定义的:这样的模块只是一个驻留在磁盘上的文本文件,就像任何数据文件一样。
一些框架提供的一种方法是拥有一个"发现"实用程序,它将静默地导入项目文件夹中的所有"py"文件。这样,您的观点就可以在没有显式导入的情况下"形成"。您可以使用如下函数:
import os
def discover(caller_file):
caller_folder = os.path.dirname(caller_file)
for current, folders, files in os.walk(caller_folder):
if current == "__pycache__":
continue
for file in files:
if file.endswith(".py"):
__import__(os.path.join(current, file))
并使用discover(__file__)
在您的主模块上调用它
这篇关于加载模块以调用其修饰器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:加载模块以调用其修饰器
猜你喜欢
- pytorch 中的自适应池是如何工作的? 2022-07-12
- 如何在 Python 的元组列表中对每个元组中的第一个值求和? 2022-01-01
- padding='same' 转换为 PyTorch padding=# 2022-01-01
- python check_output 失败,退出状态为 1,但 Popen 适用于相同的命令 2022-01-01
- 使用Heroku上托管的Selenium登录Instagram时,找不到元素';用户名'; 2022-01-01
- 如何将一个类的函数分成多个文件? 2022-01-01
- python-m http.server 443--使用SSL? 2022-01-01
- 沿轴计算直方图 2022-01-01
- 如何在 python3 中将 OrderedDict 转换为常规字典 2022-01-01
- 分析异常:路径不存在:dbfs:/databricks/python/lib/python3.7/site-packages/sampleFolder/data; 2022-01-01