如何获取当前模块内某个类的所有实例

2024-04-17

我有一个模块foo定义一个类Foo,并实例化该类的多个实例。

从其他模块,我可以import foo并获得一个列表Foo实例化的对象:

[getattr(foo,f) for f in dir(f) if isinstance(getattr(foo,f), foo.Foo)]

如果我可以在模块内执行此操作会很方便foo。但正如所写,名字foo里面没有意义foo,并更改为self没有帮助。

有没有一种方法可以在该模块中使用内省来查找该类的所有实例?我希望有一种方法可以避免制作列表并附加每个实例。


goal: "import foo并获取由...实例化的 Foo 对象的列表"

你根本不需要反省。想象一下这是你的班级:

class Registered(object):
    _all = set()
    def __init__(self):
        self.__class__._all.add(self)

演示;实例化一堆对象并引用它们:

>>> Registered()
>>> Registered()
>>> Registered()

>>> Registered._all
{<__main__.Registered object at 0xcd3210>, <__main__.Registered object at 0xcd3150>, <__main__.Registered object at 0xcd31d0>}

既然你正在使用dir,如果我理解正确的话,您正在尝试查找当前模块的全局变量中的所有对象。然而,它并不能真正获得当前模块中的所有对象,只能获得那些绑定到变量的对象。如果那是你真正想要的,你可以这样做{var for name,var in globals() if isinstance(var,Foo)}

如果这不是您真正想要的,您可以修改上面的内容以跟踪通过以下方式定义对象的模块inspect.currentframe().f_back.f_globals或其他东西,但这会阻止您使用中定义的工厂函数foo.py或者在其他模块中。

但是,如果您实际上试图获取模块中创建的某些内容的所有实例,则这是严重编码问题的迹象;考虑在该模块中编写一个工厂函数包装器,它除了传递初始化参数并返回结果、跟踪初始化对象之外什么都不做。

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

如何获取当前模块内某个类的所有实例 的相关文章

随机推荐

  • 如何将数据传递到 Angular-strap 弹出窗口

    我试图在悬停在全日历项目上时显示角带弹出框 我正在使用 eventMouseover eventMouseout 回调来显示 隐藏弹出窗口 scope calendarConfig defaultView basicWeek eventMo
  • git push origin master 凭据丢失或无效

    无法再推送到原始主机 git push origin master 几天以来 我卸载了 git 和 Visual Code 并重新安装了它 但没有任何结果 我遇到了同样的错误 Missing or invalid credentials E
  • 如何在同一进程中从不同路径加载到同一库两次?

    我正在编写一个新程序 即使用 OpenSSL 加密数据 我希望我的程序符合 FIPS 标准 为了强制执行 FIPS 模式 我使用 API 进行设置FIPS 模式 集 我还需要将加密的数据传输到第三方设备 设备供应商还提供了一个与设备通信的库
  • 在 C# 中匹配西里尔字母符号

    我有一个巨大的代码文件 其中有很多行 如下所示 Enterprise TextMessageBox Show String Format S n n 0 e gt Message S 我想做的是用我提供的另一个文本找到带有西里尔符号字符串的
  • 复杂 json 中的嵌入表达式未正确替换

    在空手道测试中 我们能够替换 json 中单个键的嵌入表达式 但是当尝试替换 json 的复杂键时它不起作用 输入 json integration serviceData integrationService name integrati
  • 如何在 Eclipse/Java 中的同一工作区中引用另一个项目中的类

    我的 Eclipse ADT Android Java 工作区中有两个项目 MyProject MyProjectAutomatedUITests 在MyProject中有一个包 constants和一个班级ButtonNames java
  • 将div放入MYSQL die

    我有这个 mysql 请求 mysql query query or die mysql error 很简单 但我想改变mysql error 对于这个div div class ui widget div class ui state h
  • 无法使用机器ip连接到mongodb

    已安装Mongo using homebrew 如果我输入mongo在外壳上 它连接到test 但是当我输入ip address本地机器而不是127 0 0 1 mongo host 192 168 1 100 verbose 它给我错误消
  • 告诉程序当没有找到保存数据时要做什么 NSUserDefaults,iPhone

    我已经保存了使用 NSUserDefaults 保存的数据 我的印象是 如果已经没有任何内容保存到密钥中 第一次运行应用程序 它将默认为 0 然而 情况似乎并非如此 这是我所拥有的 To save void viewWillDisappea
  • style css标签会在body中渲染吗?

    我正在使用 CMS 显然它有一个错误 不允许我向其中添加任何内容一篇博客文章 它将所有内容插入正文中 在大多数情况下都可以正常工作 但在如下代码实例中 如果将这种类型的代码放入标签在所有主要浏览器中 IE8 Firefox Chrome 和
  • 如何保护应用程序免受第 3 方 js 库中存在的 XSS 向量的影响?

    我在 Android 移动应用程序中使用各种第 3 方库 如 cordova js jquery jquery mobile mobilizer 等 通过不安全地使用 eval settimeout inner outerhtml 这些库被
  • Hive:转换“yyyy-MM-dd'T'HH:mm:ss.SSS'Z'”中缺少秒数的字符串日期时间

    我使用以下代码将字符串日期时间变量转换为日期时间 但转换后的字符串缺少 SSS 部分 使用的代码 cast FROM UNIXTIME UNIX TIMESTAMP oldtime yyyy MM dd T HH mm ss SSS Z y
  • 如何创建类python中所有可见元素的列表

    我正在使用 python 3 x Selenium WebDriver 我正在制作一个 for 循环来遍历页面的所有元素 限制类中元素的长度 然后打印迭代次数 但它如何获取所有可见和隐藏的元素仅获取页面中的可见元素 要从我正在使用的类中获取
  • Z-index 不适用于 Flex 元素? [复制]

    这个问题在这里已经有答案了 我试图有两列 一列是可以展开并重叠另一列的菜单 但我使用了一个 Flex 元素来包裹这些列 并且我的菜单展开了behind另一个元素 即使具有更大的z index 渲染效果是这样的 main font famil
  • 使用 Clipper 库的平行线

    我在用着CLIPPER http www angusj com delphi clipper php库偏移线并尝试制作平行线 ClipperOffset co new ClipperOffset co AddPath s JoinType
  • 使用jquery从右向左滑动内容

    当您按下 下一步 按钮时 视口会更改内容 两个 并进行转换 我想要的是 我想滑动内容 正如您在演示中看到的那样 使用translateX 200px 能给我渴望的效果 但它开始于0px并前往 200px 我希望每个 div 从红色条带 右
  • 解决“未找到 mongo”和“php_mongo.dll 不是 win32 应用程序”错误

    我已经尝试安装 mongodb 6 个多小时了 但仍然没有成功 我将非常详细地说明这一点 以便希望有人能帮助我完成这项工作 My local comp HP laptop Windows 7 64 bit operating system
  • 运行时固定大小 std::vector ?

    性能在我的应用程序中至关重要 我需要类似的东西std experimental dynarray http en cppreference com w cpp container dynarray 因此数组的大小在运行时决定 所以我考虑使用
  • 从 sqlite 读取 unicode 并创建 NSString

    我正在开发一个 iOS 应用程序 我需要在 SQLite DB 中存储和检索 这是具有下标的 NSString 的表示形式 我可以在编译时使用常量创建一个 NSString Br u2082 CCl u2084 u2082 是 2 下标 u
  • 如何获取当前模块内某个类的所有实例

    我有一个模块foo定义一个类Foo 并实例化该类的多个实例 从其他模块 我可以import foo并获得一个列表Foo实例化的对象 getattr foo f for f in dir f if isinstance getattr foo