Python中的实例模块

问题描述 投票:0回答:1

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

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

python class object module
1个回答
1
投票

所以 - 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(),则返回相同。

© www.soinside.com 2019 - 2024. All rights reserved.