如何在 Python 3 中迭代模块列表并调用它们的方法

2023-12-01

Goal:能够将文件放入“模块”文件夹并从每个文件调用一组通用的方法/变量。

如果所有模块都有公共方法/变量,是否应该将模块初始化为静态类?

我的项目文件夹树:

/client
    __init__.py

    /modules
        __init__.py
        foo.py
        bar.py
        spam.py

客户端 __init__.py 文件:

from client.modules import __all__ as moduleStrings

(get list of "modules" from "moduleStrings") # How do I write this function?

# Initialize modules dynamically
for module in modules:
    if (hasattr(module, 'init')):
        print(module.__name__)
        print("Has an initialize method!")
        module.init()

# Call the do_stuff method in each module
for module in modules:
    if (hasattr(module, 'do_stuff')):
        print("Has a do_stuff method!")
        module.do_stuff()

模块 __init__.py 文件:

# Stores a list of module string names in __all__
import os
import glob
files = glob.glob(os.path.dirname(__file__)+"/*.py")
__all__ = [ os.path.basename(f)[:-3] for f in files if "__init__" not in f]

您可以使用本机 python“imp”模块(https://docs.python.org/3.4/library/imp.html):

假设相同的项目树:

/client
__init__.py

/modules
    __init__.py
    foo.py
    bar.py
    spam.py

client init.py 文件:

# -*- coding: utf-8 -*-
#!/usr/bin/python

import modules.__init__
#here you generate
modules.__init__.__load_all__()

modules init.py 文件:

# -*- coding: utf-8 -*-
#!/usr/bin/python

import imp,os

def __load_all__(dir="modules"):
    list_modules=os.listdir(dir)
    list_modules.remove('__init__.py')
    for module_name in list_modules:
        if module_name.split('.')[-1]=='py':
            print "Load module ' ",module_name,"' :"
            foo = imp.load_source('module', dir+os.sep+module_name)
            foo.MyClass()

最后

模块(spam.py、bar.py、foo.py 等)文件:

# -*- coding: utf-8 -*-
#!/usr/bin/python

def __init__():
    print "load"

def MyClass():
    print "myclass spam,bar,foo, etc..."

运行客户端时__init__.py,我们迭代模块并动态初始化它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Python 3 中迭代模块列表并调用它们的方法 的相关文章

  • 如何将本机 popcount 与 numba 一起使用

    我正在使用 numba 0 57 1 我想在我的代码中利用本机 CPU popcount 我现有的代码太慢 因为我需要运行它数亿次 这是一个 MWE import numba as nb nb njit nb uint64 nb uint6
  • Pandas 字符串提取所有匹配项

    我正在学习 pandas 系列字符串方法中的正则表达式操作 我能够从字符串中提取第一个数字 但我的正则表达式与第二个数字不匹配 如何捕获这两个数字 注意第二行 第二个元素在这里是 NAN CODE import pandas as pd d
  • 如何测试使用 XCom 的 Apache Airflow 任务

    我正在尝试找出一种测试 DAG 的方法 其中有几个任务使用 XCom 进行通信 由于控制台命令只允许我从 DAG 运行任务 有没有一种方法可以测试通信而无需通过 UI 运行 DAG Thanks 这是一种对我有用的方法 尽管 Airflow
  • 如何忽略传递给函数的意外关键字参数?

    假设我有一些功能 f def f a None print a 现在 如果我有一本字典 比如dct a Foo 我可以打电话f dct 并得到结果Foo打印 但是 假设我有一本字典dct2 a Foo b Bar 如果我打电话f dct2
  • Python sqlite3参数化删除表

    我在 python 中删除 sqlite3 表时遇到问题 我正在使用标准sqlite3模块 self conn sqlite3 connect sql drop table self conn execute sql u table nam
  • Python 按照层次结构按多个分隔符分割字符串

    我只想根据多个分隔符 例如 and 和 按顺序分割字符串一次 例子 121 34 adsfd gt 121 34 adsfd dsfsd and adfd gt dsfsd adfd dsfsd adfd gt dsfsd adfd dsf
  • 如何使用 HTTP 标头发送非英语 unicode 字符串?

    我是 HTTP 相关问题的新手 我的问题是在 iOS 开发中 我想使用 HTTP 标头发送一个字符串 所以我使用 httpRequest setValue nonEnglishString forHTTPHeaderField custom
  • turtle.Screen().screensize() 未输出正确的屏幕尺寸[重复]

    这个问题在这里已经有答案了 我编写了一些代码来在屏幕周围随机放置点 但是 它并没有覆盖整个屏幕 import turtle import random t turtle Turtle color red green blue pink ye
  • PyTorch:加速数据加载

    我正在使用 dendnet121 从 Kaggle 数据集进行猫 狗检测 我启用了cuda 看起来训练速度非常快 然而 数据加载 或者可能是处理 似乎非常慢 有一些方法可以加快速度吗 我尝试玩女巫批量大小 但没有提供太多帮助 我还将 num
  • OpenCV - 我需要将彩色图像插入黑白图像并且

    我用以下代码将黑白图像插入彩色图像 没问题 face grey cv cvtColor face cv COLOR RGB2GRAY for row in range 0 face grey shape 0 for column in ra
  • 如何在Python中求和

    我想知道如何在 python 中表示总和而不需要像这样的循环here http docs scipy org doc scipy reference tutorial optimize html 我们有 def rosen x The Ro
  • 使用 python 只读取 Excel 中的可见行

    我想只读取 python 中 Excel 工作表中的可见行 输入 Excel表 所以当我过滤时 作为 python 中的输出 在本例中我将仅获得可见数据 1 行 这是我的代码 from openpyxl import load workbo
  • PyCharm 无法识别字典值类型

    我有一个简单的代码片段 其中我将字典值设置为空列表 new dict for i in range 1 13 new dict i 现在 如果在下一行的循环内我会输入new dict i 并添加一个点 我希望 PyCharm 向我显示可用于
  • 如何在 Pytorch 中将一维 IntTensor 转换为 int

    如何将一维 IntTensor 转换为整数 这 IntTensor int 给出错误 KeyError Variable containing 423 torch IntTensor of size 1 我所知道的最简单 最干净的方法 In
  • psycopg 错误,列不存在

    我不断收到这个 错误 psycopg2 ProgrammingError 列 someentry 不存在 该错误表明该列someentry不存在时someentry不是列 它只是要输入数据库的值 这是给出错误的代码 cur execute
  • Celery:每个工作人员的 task_acks_late 的不同设置/向 celery 添加自定义选项

    这个问题是后续问题django celery 禁用一个工作者的预取 有错误吗 https stackoverflow com questions 58290045 django celery disable prefetch for one
  • 如何修改 contenteditable 元素的innerHTML

    我使用 Selenium 与 Chrome driver 和 python3 6 来测试网站 我在网页中有代码片段如下 div class 3F6QL 2WovP div class 39LWd Type a message div div
  • Pip 突然使用了错误版本的 Python

    在 os x 上使用 pip 时遇到一个奇怪的问题 据我所知 快速查看我的 bash history 似乎可以确认 我最近没有对我的配置进行任何更改 唉 pip 命令似乎突然使用了与以前不同的 python 版本 到目前为止 我使用命令 p
  • Matplotlib 中的 TwoSlopeNorm 未按预期工作

    我正在尝试创建一个具有发散颜色图的绘图 该颜色图在零附近不对称 In this https stackoverflow com a 20146989 6288682例如 DivergingNorm函数被使用并产生我想要的 然而 我使用的是更
  • 通过 ManyToManyField = Value 对 django 查询集进行排序

    如果有一些模型 例如 class Tag models Model name models CharField class Thing models Model title models CharField tags models Many

随机推荐

  • 比较两个数据帧并过滤匹配的值

    上一个问题 Pandas 比较两个数据帧并确定匹配的值 我有两个数据框 print a ID Value 0 AA12 101 BB101 CC01 DD06 1 1 AA12 101 BB101 CC01 DD06 2 2 AA11 10
  • 如何在 Swing 中更新 JComboBox 实例?

    我有 3 个组合框 选择第一个组合框后 其余的应该更新 但我的代码似乎不起作用 请大家帮忙 这是我的代码 因为我的代码很长 所以我只写错误部分 example code public class GuiComponents JComboBo
  • 程序的一个实例“发生 JNI 错误”,而另一个实例则不然

    我在一台计算机上用 Eclipse Java Mars 编写了一个大型程序 运行良好 我将该程序导出为可运行的 Jar 文件并运行它没有出现任何问题 即使我将整个项目导出到另一台计算机 该程序仍然可以运行 当我对项目进行微小更改时 另一台计
  • 关于 Rust HashMap 和 String 借用的困惑

    该程序接受一个整数 N 后接 N 行 其中包含两个以空格分隔的字符串 我想将这些行放入HashMap使用第一个字符串作为键 第二个字符串作为值 use std collections HashMap use std io fn main l
  • 从 WordPress 全局搜索结果中排除 woocommerce 产品类别

    我使用此代码从 wordpress 搜索结果中排除某些帖子类别 function SearchFilter query if query gt is search query gt set cat 709 710 614 return qu
  • 我最多可以更改按钮的背景多少次?

    所以 我试图用我传递的颜色和白色之间的颜色来闪烁按钮 在代码崩溃后 它似乎只闪烁了很多次 我尝试过以不同的闪烁速率来实现闪烁 并且它 它有时还会破裂吗 在 a 中 我有类似 Background color rgb 255 0 0 的字符串
  • 如何将emacsclient背景设置为Emacs背景?

    我有 在我的 emacs 中 set background color 101416 set foreground color f6f3e8 我有 2 个绑定 alias ex emacsclient nw alias ec emacscl
  • 转储 Spring 启动配置

    我们的运维人员希望在应用程序启动时将 Spring boot 配置 即所有属性 转储到日志文件中 我认为这可以通过使用注释 ConfigurationProperties 注入属性并打印它们来完成 问题是是否有更好的或内置的机制来实现这一目
  • 创建 Sql Server 身份验证帐户?

    我想创建一个Sql Server身份验证帐户 而不是数据库或帐户中的用户 我的意思是我想创建一个帐户 以便在启动 sql 服务器时使用 SQL 事务或使用 C 从中登录 据我所知 您只能使用两种模式 Windows 或 SQL Server
  • 重写条件以比较 Request_URI 中的顶级目录

    我的网站上有几个客户 每个客户的网站设置基本相似 这些客户帐户的文件夹是出于组织目的而设置的 位于 mydomain com client sampleclient mydomain com client anotherclient etc
  • Echo Return构造方法;

    不起作用 我不明白如果你试图在构造函数上返回值 你为什么要研究 OOP OOP 的重点是拥有执行许多任务的对象 如果您想返回字符串 数组 资源 那么 OOP 不适合您 构造函数用于在对象初始化的前期阶段启动代码 它允许您在用户使用对象之前执
  • Bootstrap、Prototype Js 和 Jquery 的冲突

    经过 7 天的搜索并尝试了不同的解决方案后 但没有成功 我想问 我有一个带有原型 js protaplasm scriptaculous jquery 和 Jquery ui 的页面 它与 jquery 完美配合 没有冲突 直到我最近用 B
  • AttributeError:“系列”对象没有属性“to_numeric”

    我正在尝试按值对数据框进行排序 收到 AttributeError Series 对象没有属性 to numeric 版本 0 20 3 因此数字应该可以工作 但不行 请帮忙 import pandas as pd tables pd re
  • HTML DOM:哪些事件不会冒泡?

    大多数事件在所有浏览器中都会冒泡 但是 我知道在 Internet Explorer 中 提交 事件不会冒泡 还有哪些不冒泡的事件 HTML 框架 对象 load unload scroll 除了文档上的滚动事件必须冒泡到窗口 HTML 表
  • 获取令牌失败`AADSTS700051`

    我刚刚设置了一个Azure Active Directory租户和我有一个使用 oAuth2 的应用程序Implicit流动 我收到以下错误 error AADSTS700051 response type token is not ena
  • JOIN 子查询

    我想在将两列与其中一个表上的 id 连接后 对两个表执行简单的联接 第一步 SELECT cars hhid cars vmid FROM cars 现在我想将此结果与另一个表 表2 进行比较 新结果应该是 table1 汽车 中与 tab
  • HTML5 iFrame 无缝属性

    在 HTML5 中 iframe 具有 无缝 等新属性 可以删除边框和滚动条 我已经尝试过 但似乎不起作用 我仍然可以看到滚动条和边框 我使用 Google Chrome 作为浏览器 这是我的代码 知道为什么它不起作用吗 还有一个问题 是否
  • 根据构建类型通过 Gradle 设置 Android.mk 标志

    我需要在里面设置一个标志Android mk文件告诉 C 代码是否处于调试模式 LOCAL MODULE auth LOCAL SRC FILES auth c LOCAL CFLAGS DDEBUG MODE 0 LOCAL EXPORT
  • 图标未显示在 Qt 主窗口中

    我的 Qt 应用程序包含一个主窗口 我将资源添加到项目中 并向资源添加了一个图标 在主窗口源文件中 我使用以下行将图标加载到主窗口 this gt setWindowIcon QIcon img Icon ico 当我从 Qt 创建者运行应
  • 如何在 Python 3 中迭代模块列表并调用它们的方法

    Goal 能够将文件放入 模块 文件夹并从每个文件调用一组通用的方法 变量 如果所有模块都有公共方法 变量 是否应该将模块初始化为静态类 我的项目文件夹树 client init py modules init py foo py bar