Python中的实例模块

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中的实例模块相关的知识,希望对你有一定的参考价值。

在方法中使用__name__引用定义类的模块。

有没有办法让一个对象获取已经实例化的模块?

答案

所以 - Python的动态允许函数检查调用它的帧对象。 。

如果你可以明确地将模块传递给类构造函数会更好:

class MyObject:
    def __init__(self, module):
         self.module = module
         ...

在其他文件中:

m  = MyObject(__name__)

但是,正如我在第一行中提到的,你可以使用调用模块的代码 - 如果你有一个专门的元类,则保存,调用一个类的__init__的代码是实例化对象的地方。所以你可以写:

import inspect

class MyObject:
    def __init__(self, module):
         caller_frame = inspect.currentframe().f_back
         self.module = caller_frame.f_globals.get("__name__", "<unknown module>")
         ...

Frame对象是一个内部Python对象,它在程序运行时保持代码上下文的执行状态。它包含对该框架可用的全局变量和局部变量的引用,以及代码对象,当前源代码行等。最上面的帧(0)是执行中的当前帧 - 第二个到顶部(1)是当前函数/方法的直接调用者。框架.f_globals属性是对全局字典的直接引用 - 如果在该框架内调用globals(),则返回相同。

以上是关于Python中的实例模块的主要内容,如果未能解决你的问题,请参考以下文章

有条件地导入 python 类的片段

启用 Proguard 后无法实例化片段

如何使用模块化代码片段中的LeakCanary检测内存泄漏?

片段事务中的实例化错误

python中的模块,库,包有啥区别

Python 常用模块学习