从字符串获取python类对象[重复]

2024-02-20

可能的重复:
Python 中的动态模块导入 https://stackoverflow.com/questions/301134/dynamic-module-import-in-python

可能是一个简单的问题!我需要迭代从设置文件传递的类列表(作为字符串)。课程列表如下:

TWO_FACTOR_BACKENDS = (
    'id.backends.AllowToBeDisabled', # Disable this to enforce Two Factor Authentication
    'id.backends.TOTPBackend',
    'id.backends.HOTPBackend',
    #'id.backends.YubikeyBackend',
    #'id.backends.OneTimePadBackend',
    #'id.backends.EmailBackend',
)

我现在需要打电话给authenticate()这些类中的每一个都具有函数(当然,除非注释掉)。我很高兴迭代列表,我只需要知道如何在 foreach 循环中将字符串转换为 Class 对象,以便我可以调用authenticate方法就可以了。是否有捷径可寻?


你想使用the importlib module http://docs.python.org/dev/library/importlib.html要处理这样的模块加载,然后只需使用getattr() http://docs.python.org/library/functions.html#getattr去上课。

例如,假设我有一个模块,somemodule.py其中包含类Test:

import importlib

cls = "somemodule.Test"
module_name, class_name = cls.split(".")

somemodule = importlib.import_module(module_name)

print(getattr(somemodule, class_name))

给我:

<class 'somemodule.Test'>

添加包之类的东西很简单:

cls = "test.somemodule.Test"
module_name, class_name = cls.rsplit(".", 1)

somemodule = importlib.import_module(module_name)

如果已经导入了模块/包,它不会导入它,因此您可以愉快地执行此操作,而无需跟踪加载模块:

import importlib

TWO_FACTOR_BACKENDS = (
    'id.backends.AllowToBeDisabled', # Disable this to enforce Two Factor Authentication
    'id.backends.TOTPBackend',
    'id.backends.HOTPBackend',
    #'id.backends.YubikeyBackend',
    #'id.backends.OneTimePadBackend',
    #'id.backends.EmailBackend',
)

backends = [getattr(importlib.import_module(mod), cls) for (mod, cls) in (backend.rsplit(".", 1) for backend in TWO_FACTOR_BACKENDS)]

 

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

从字符串获取python类对象[重复] 的相关文章

随机推荐

  • 群体行为问题

    昨天我看到了克雷格雷诺兹的Boids http www red3d com cwr boids 随后我想尝试一下用 Java 实现一个简单的 2D 版本 我已经根据以下内容整理了一个相当基本的设置康拉德 帕克的笔记 http www ver
  • 使用PostgreSQL全文搜索排名的最佳方式

    继从这个答案 https stackoverflow com a 4014625 265521如果我想按排名排序 我想知道使用 PostgreSQL 内置全文搜索的最佳方法是什么 and限制为仅匹配查询 让我们假设一个非常简单的表 CREA
  • 递归 C void 函数和 return 关键字

    有人知道以下之间的内部区别 void RecFoo1 int bar if bar 0 return RecFoo1 bar 1 and void RecFoo2 int bar if bar 0 return return RecFoo2
  • 箭头函数 - 为什么会将全局对象打印到控制台? [复制]

    这个问题在这里已经有答案了 为什么o foo 将全局对象打印到控制台 let o foo gt console log this bar console log this o foo Global object undefined o ba
  • “__COMPAT_LAYER”实际上是做什么的?

    最近 我试图给我应用程序管理员权限 无需系统询问 您想授予管理员权限吗 我找到了一种效果很好的方法 我找到的解决方案 我创建了一个名为的bat文件非管理员 bat并在其中写入以下代码 cmd min C set COMPAT LAYER R
  • 将 javah -jni 与 Eclipse 项目结构结合使用

    我需要知道我是否以错误的方式做事 我有以下项目结构 一个非常标准的结构 然后我已经配置了javah作为这样的外部工具 当我运行外部工具时OSManager4Windows java我期待着找到it univpm quickbackup ut
  • 分析 CherryPy

    我一直在尝试开始分析我的 CherryPy Web 服务器 但文档缺乏如何设置的详细信息 我明白我应该能够使用cherrypy lib profiler作为安装我的初始服务器的中间件 现在 我有如下代码 server app ServerC
  • 通配符子域和子文件夹作为 .htaccess 中的参数

    我有一个门户网站http www mysite com http www mysite com 客户在其中注册并获得自己的网站子域版本来运行我的应用程序 我已经设置了通配符子域 DNS VirtualHost 等并使其正常工作 我想要设置的
  • ASP.NET Core 中的服务器端图形

    我最近将 ASP NET MVC 应用程序从 ASP NET 升级到 ASP NET Core 在我的控制器操作中 我有一段依赖 System Drawing 来创建个人资料图片的代码 using FileStream stream new
  • 在 JUnit 测试中的 MockHttpServletRequest 中设置 @ModelAttribute

    我正在尝试测试 spring mvc 控制器 其中一种方法采用表单输入作为 POST 方法 该方法通过一个获取表单的commandObject ModelAttribute注解 如何使用 Spring 的 Junit 测试设置此测试用例 控
  • “在惯常位置找不到 Google Cloud SDK,并且未提供路径。”詹金斯

    我对詹金斯很陌生 但几天来我一直在寻找这个问题的答案 我在 localhost 8080 上运行 jenkins 我用 Java 编写了一个程序 它使用 gradle 部署到 Google App Engine 云 现在我想使用 Jenki
  • Tensorboard 陷入“命名空间层次结构寻找相似子图”的困境

    我尝试通过 Tensorboard 可视化 CNN 的迭代过程 但浏览器总是卡在 命名空间层次结构查找相似子图 中 然后崩溃 QAQ为什么会出现这种情况 我该如何修复它 陷入 命名空间层次结构寻找相似子图 的困境 https i stack
  • DBI::InterfaceError:无法加载驱动程序(未初始化常量 MysqlError)

    我已经包括了宝石 dbd mysql 0 4 4 dbi 0 4 5 mysql 2 8 1 当我运行以下代码时 在 Rails 控制台上 require rubygems require dbi require dbd mysql dbh
  • 增加边框宽度时如何防止相邻元素移动?

    我有一个由盒子组成的简单布局 action box width 300px height 200px border 1px solid black float left margin left 10px margin top 10px ac
  • iOS - 动画效果 - 图像弹出

    我希望 iPhone 应用程序中的图像能够 弹出 在屏幕上 而不仅仅是出现 我所说的 弹出 是指它会从小点增长到实际大小 作为参考 这与 Keynote 中的 pop 动画效果完全相同 我对 iOS 动画完全陌生 所以如果有人能指出我需要使
  • Wordpress EC2 上的永久链接

    我刚刚将我的博客从本地网络服务器转移到 Amazon EC2 Free Linux 服务器 现在除了永久链接之外一切似乎都正常 我禁用并重新启用它们 但它仍然中断 我尝试过运行脚本 sudo a2enmod rewrite 但它说 a2en
  • 又名获取计划。又名获取组。 QueryDSL 中的实体图

    我无法找到任何在 QueryDSL 中实现获取计划的方法 我尝试了很多 你能为我提供任何提示吗 另外 您是否知道在不同情况下选择要获取哪些字段以及延迟加载哪些字段的更好方法 我使用批量获取 因此无法使用 JOIN FETCH 使用这样的 E
  • 选择包含日语字符的 MySQL 行

    有人知道一种可靠的方法 使用 mySQL 或其他方式 来选择数据库中包含日语字符的行吗 我的数据库中有很多行 其中一些仅包含字母数字字符 其中一些包含日语字符 当您遇到字符集问题时的规则 创建数据库时使用utf8编码 CREATE DATA
  • webpack 从多个入口文件导出类

    我正在使用 webpack 捆绑一个框架供第三方使用 该框架应该公开多个 ES6 类 我以模块化方式构建 每个文件编写一个类 我想要做的是将所有这些文件构建在一起 并将它们捆绑在给定的 命名空间 下 例子 苹果 jsexport class
  • 从字符串获取python类对象[重复]

    这个问题在这里已经有答案了 可能的重复 Python 中的动态模块导入 https stackoverflow com questions 301134 dynamic module import in python 可能是一个简单的问题