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中的实例模块的主要内容,如果未能解决你的问题,请参考以下文章