我怀疑这是导致“为什么要这样做?”的问题之一。但是这里有:
我需要找到一种方法来伪造__main__
中定义的类的模块;即:
假设我们有a.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'>
那么,如何将A类模块视为b,而不将其移入b?
答案 0 :(得分:0)
您可以设置班级的__module__
属性,但有一些警告:
class A(object):
__module__ = 'b'
主要警告是,如果在您拨打getmodule
时尚未导入模块b
,则会导致getmodule(A)
返回无。我认为,如果以某种非标准方式导入b
,也可能出现问题,例如通过隐式相对导入而不是作为包的一部分导入它(如果它是包的一部分)。
但从概念上讲,你所做的事情有点可疑。将A模块设置为其他模块是有风险的,因为当真实模块可能不知道(即导入)该模块时,实际上可能甚至不存在“伪装”模块。