Python——检查对象是否是某个模块中任何类的实例

2023-12-25

需要一种方法来检查对象是否是某个特定模块中任何类的实例。

我知道我可以通过从该模块显式导入每个类并检查元组来做到这一点:

from my_module import ClassOne, ClassTwo

>>> isinstance(my_obj, (ClassOne, ClassTwo))
True

但实际上,我导入的模块中有大量的类,并且显式地导入它们、使用它们构建一个巨大的元组并对其进行类型检查似乎不必要地冗长。我尝试了一些方法来避免这种情况:

import my_module

# Test my_obj against the module itself
>>> isinstance(my_obj, my_module)
TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types

# Try to test against a wildcard attribute on my_module
>>> isinstance(my_obj, my_module.*)
SyntaxError: invalid syntax

#Try to build a tuple of clases with iteration to check against
>>> for klass in my_module:
TypeError: 'module' object is not iterable

有没有一种方法可以对 my_module 中的所有类进行类型检查,而无需在元组中显式命名它们?

可选背景信息:
我可能忽略了解决我的问题的更好方法 - 如果您想知道,情况如下:

我们正在将数据从 Google App Engine 应用程序导出到我们在 Rackspace 上托管的应用程序。我们正在序列化数据pickle然后通过 HTTP 请求将其发送到我们的 Rackspace 服务器。

Google App Engine 数据库中的一些数据属于 GAE 特定的数据类型,从 google.appengine.api.datastore_types 导入。如果任何这些数据类型通过线路到达我们的 Rackspace 服务器,它们将引发 depickling 错误,因为我们的 Rackspace 应用程序没有所需的 GAE 库。因此,在退出 GAE 时,我会检查是否有任何传出对象具有 google.appengine.api.datastore_types 的类型。如果确实如此,我要么将它们转换为内置数据类型,要么从对象中删除该字段。


您可以使用inspect.getmembers http://docs.python.org/2/library/inspect.html#inspect.getmembers获取模块中的所有类:

inspect.getmembers(my_module,inspect.isclass)

这将返回名称-类对的列表。你只想要课程:

my_module_classes = tuple(x[1] for x in inspect.getmembers(my_module,inspect.isclass))

当我最初写这个答案时,我设法忽略的一件事是检查班级的能力__module__属性。您也许可以通过检查是否__module__是你所期望的:

from somewhere import module

if getattr(obj, '__module__', None) == module.__name__:
    # obj is from module.

这可能比isinstance检查大量的类名。

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

Python——检查对象是否是某个模块中任何类的实例 的相关文章

  • Django REST序列化器:创建对象而不保存

    我已经开始使用 Django REST 框架 我想做的是使用一些 JSON 发布请求 从中创建一个 Django 模型对象 然后使用该对象而不保存它 我的 Django 模型称为 SearchRequest 我所拥有的是 api view
  • Python PAM 模块的安全问题?

    我有兴趣编写一个 PAM 模块 该模块将利用流行的 Unix 登录身份验证机制 我过去的大部分编程经验都是使用 Python 进行的 并且我正在交互的系统已经有一个 Python API 我用谷歌搜索发现pam python http pa
  • 如何在 Sublime Text 2 的 OSX 终端中显示构建结果

    我刚刚从 TextMate 切换到 Sublime Text 2 我非常喜欢它 让我困扰的一件事是默认的构建结果显示在 ST2 的底部 我的程序产生一些很长的结果 显示它的理想方式 如在 TM2 中 是并排查看它们 如何在 Mac 操作系统
  • Python tcl 未正确安装

    我刚刚为 python 安装了graphics py 但是当我尝试运行以下代码时 from graphics import def main win GraphWin My Circle 100 100 c Circle Point 50
  • 从 scikit-learn 导入 make_blobs [重复]

    这个问题在这里已经有答案了 我收到下一个警告 D Programming Python ML venv lib site packages sklearn utils deprecation py 77 DeprecationWarning
  • 从列表中的数据框列中搜索部分字符串匹配 - Pandas - Python

    我有一个清单 things A1 B2 C3 我有一个 pandas 数据框 其中有一列包含用分号分隔的值 某些行将包含与上面列表中的一项的匹配 它不会是完美的匹配 因为它在其中包含字符串的其他部分 该列 例如 该列中的一行可能有 哇 这里
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • IRichBolt 在storm-1.0.0 和 pyleus-0.3.0 上运行拓扑时出错

    我正在运行风暴拓扑 pyleus verbose local xyz topology jar using storm 1 0 0 pyleus 0 3 0 centos 6 6并得到错误 线程 main java lang NoClass
  • NameError:名称“urllib”未定义”

    CODE import networkx as net from urllib request import urlopen def read lj friends g name fetch the friend list from Liv
  • feedparser 在脚本运行期间失败,但无法在交互式 python 控制台中重现

    当我运行 eclipse 或在 iPython 中运行脚本时 它失败了 ascii codec can t decode byte 0xe2 in position 32 ordinal not in range 128 我不知道为什么 但
  • python 集合可以包含的值的数量是否有限制?

    我正在尝试使用 python 设置作为 mysql 表中 ids 的过滤器 python集存储了所有要过滤的id 现在大约有30000个 这个数字会随着时间的推移慢慢增长 我担心python集的最大容量 它可以包含的元素数量有限制吗 您最大
  • Geopandas 设置几何图形:MultiPolygon“等于 len 键和值”的 ValueError

    我有 2 个带有几何列的地理数据框 我将一些几何图形从 1 个复制到另一个 这对于多边形效果很好 但对于任何 有效 多多边形都会返回 ValueError 请指教如何解决这个问题 我不知道是否 如何 为什么应该更改 MultiPolygon
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • Python - 按月对日期进行分组

    这是一个简单的问题 起初我认为很简单而忽略了它 一个小时过去了 我不太确定 所以 我有一个Python列表datetime对象 我想用图表来表示它们 x 值是年份和月份 y 值是此列表中本月发生的日期对象的数量 也许一个例子可以更好地证明这
  • 通过数据框与函数进行交互

    如果我有这样的日期框架 氮 EG 00 04 NEG 04 08 NEG 08 12 NEG 12 16 NEG 16 20 NEG 20 24 datum von 2017 10 12 21 69 15 36 0 87 1 42 0 76
  • Nuitka 未使用 nuitka --recurse-all hello.py [错误] 编译 exe

    我正在尝试通过 nuitka 创建一个简单的 exe 这样我就可以在我的笔记本电脑上运行它 而无需安装 Python 我在 Windows 10 上并使用 Anaconda Python 3 我输入 nuitka recurse all h
  • 如何从没有结尾的管道中读取 python 中的 stdin

    当管道来自 打开 时 不知道正确的名称 我无法从 python 中的标准输入或管道读取数据 文件 我有作为例子管道测试 py import sys import time k 0 try for line in sys stdin k k
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL
  • Python:元类属性有时会覆盖类属性?

    下面代码的结果让我感到困惑 class MyClass type property def a self return 1 class MyObject object metaclass MyClass a 2 print MyObject
  • PyAudio ErrNo 输入溢出 -9981

    我遇到了与用户相同的错误 Python 使用 Pyaudio 以 16000Hz 录制音频时出错 https stackoverflow com questions 12994981 python error audio recording

随机推荐

  • 有关 PDFKit 和 Rails 应用程序的帮助

    使用 Ubuntu 10 04 Lucid 网络服务器 linode 按照这些说明安装 wkhtmltopdflink http aaronvb com blog 2010 7 15 pdfkit and wkhtmltopdf witho
  • 如何使用 SSIS 包将带有标题和详细数据的平面文件加载到数据库中?

    我必须加载一个具有不同标题和详细信息以及可变列数的平面文件 这些有亲子关系 如何将数据加载到SQL Server中 该文件如下所示 DEP 0116960 20110511 01 061000104 DA 1000022220940 AMT
  • 如何使用 ggplot2 用正条和负条标记条形图

    I m trying to plot a labeled barplot with ggplot2 with positive and negative bars That works so far but I would like to
  • 记录多实例应用程序最佳实践?

    我终于在我的 WPF 桌面应用程序中尝试了 log4net 我正在努力解决 RollingFileAppender 没有对多实例应用程序的内置支持这一事实 我不喜欢仅仅为了让记录器高兴而将应用程序限制为单个实例的想法 单实例技巧都是丑陋的技
  • 我可以从服务器将多个 zip 文件下载到一个 zip 文件中吗?

    我想从服务器下载多个 zip 文件 并在下载所有 zip 文件时附加并从服务器下载为一个 zip 文件 将所有 zip 文件打包到例如当前目录并将其发送到浏览器 尝试 header Content Type archive zip pass
  • 我怎样才能安全地向上转型可选? [复制]

    这个问题在这里已经有答案了 假设我有一个Optional
  • 在 Julia-lang 中生成热图的子图

    我正在尝试生成一个具有多个热图 根据单元格值具有颜色阴影的矩阵 的图形 图 眼下using Plots pyplot and heatmap mat 足以生成热图 我不清楚如何用更多的东西来制作一个图形 看完这个页面后示例子图 https
  • 如何分析约 13GB 的数据?

    我有大约 300 个文本文件 其中包含有关跟踪器 种子和对等点的数据 每个文件的组织方式如下 跟踪器 txt time torrent time peer time peer time torrent 我每个跟踪器有几个文件 并且许多信息是
  • 翻转关联数组并将新值存储在子数组中以防止丢失重复值

    我有一个可能包含重复值的平面关联数组 Array for juniors gt product category for men gt product category coats gt product category for women
  • 删除 .vagrant 文件后如何销毁虚拟机?

    我删除了包含 vagrant 文件的目录 当我安装新的虚拟机时 它抱怨端口正在使用中 那么如何在没有 vagrant 文件的情况下销毁虚拟机呢 以下 VirtualBox 命令可能会有所帮助 如果关闭电源不起作用 请尝试取消注册虚拟机 VB
  • 未捕获的类型错误:(0,_firebase.auth)不是函数

    尝试在 React 应用程序中使用 Firebase 身份验证 我按照 firbase 文档中的说明进行操作 使用 npm 安装 firebase 添加了 firebase js 文件 import as firebase from fir
  • GCP Cloud SDK 在 MAC 中安装失败

    无法使用从 gcloud 下载的包 google cloud sdk 307 0 0 darwin x86 64 tar gz 安装 gcloud sdk 支持的 Python 版本为 3 5 至 3 7 以及 2 7 9 或更高版本 这是
  • 使用 Ajax 的 URL 操作参数

    我正在尝试使用参数将数据从视图传递到控制器 现在我遇到了一些困难 一旦我从表中选择一行并按下具有 ShowTasks 的 onclick 方法的按钮 我就尝试传递这些参数 C 控制器 Route service delivery id sh
  • NullPointerException:println 需要一条消息[重复]

    这个问题在这里已经有答案了 我知道我有一个空指针 但我不知道它出现在哪里或为什么 希望在这里能得到一些帮助 Button add Button findViewById R id addfencebutton add setOnClickL
  • 使用WebView.goBack()方法时如何重新发送POST数据?

    我正在开发一个应用程序 我们为用户提供导航回用户之前查看过的网页的选项 当用户导航回包含 POST 数据的页面时 就会出现问题 我不知道如何检测 WebView 中加载的页面是否有 POST 数据 以便应用程序可以提示确认对话框 无论他是否
  • CodeIgniter 中的 set_value() 默认值

    我使用 formigniter 生成 CI 表单 http formigniter org http formigniter org 那一点效果很好 但是我想为名称字段设置默认值 输入代码如下所示
  • tput cols 在脚本中无法正常工作

    我在脚本中使用 tput cols 一切正常 除非窗口最大化 我的脚本能够正确获取任何窗口大小 但是当窗口最大化时 它会得到错误的值 80 然后我直接在终端中输入 tput cols 然后得到正确的大小 158 所以我的问题是 即使窗口最大
  • ASP.NET 和 Visual Studio - 添加项目引用与 Bin 文件夹 DLL

    我昨天刚刚开始一份新工作 这只是我在 ASP NET 方面的第二份工作 我们正在设置我的开发盒 并且在使用一些第三方组件 例如 Telerik 等 时遇到了问题 我注意到他们安装了这些第三方工具 寻找 DLL 文件 将它们复制到 bin 中
  • cakephp auth组件,使用两种模型

    我的网站有一个供员工使用的公共部分和一个供管理员使用的后端 它使用两种不同的模型 员工模型和管理员模型 我想使用身份验证组件进行员工登录和管理员登录 我知道如何设置 Auth 组件以使用默认用户模型以外的模型 但是我可以让身份验证组件使用两
  • Python——检查对象是否是某个模块中任何类的实例

    需要一种方法来检查对象是否是某个特定模块中任何类的实例 我知道我可以通过从该模块显式导入每个类并检查元组来做到这一点 from my module import ClassOne ClassTwo gt gt gt isinstance m