0

我怀疑这是会导致“你为什么要这样做?”的问题之一。但这里是:

我需要找到一种方法来伪造中定义的类的模块__main__;IE:

假设我们有一个.py:

class A(object):
    name = "a"
    pass

和 b.py:

import inspect
import a

class B(object):
    __name__ = a.__name__
    name = "b"
    pass

print inspect.getmodule(B)

调用 b.py 会导致:

<module '__main__' from 'b.py'>

那么,如何在不将其移入 b 的情况下将 A 类的模块设为 b 呢?

4

1 回答 1

0

您可以设置类的__module__属性,但有一些警告:

class A(object):
    __module__ = 'b'

主要的警告是,如果在您调用时尚未导入模块,这将导致getmodule返回 None 。我认为如果您以某种非标准方式导入也可能出现问题,例如通过隐式相对导入而不是作为包的一部分(如果它是包的一部分)导入它。bgetmodule(A)b

但是,从概念上讲,您正在做的事情有些可疑。将 A 的模块设置为其他模块是有风险的,因为当真正的模块存在时,该模块可能不为人所知(即导入),事实上,“伪装”模块甚至可能不存在。

于 2013-07-05T05:09:15.553 回答