Python,在类定义中伪造模块

2024-04-19 08:31:18 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我需要找到一种方法来伪造__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中呢?你知道吗


Tags: 模块方法namefrompyimport定义object
1条回答
网友
1楼 · 发布于 2024-04-19 08:31:18

您可以设置类的__module__属性,但需要注意:

class A(object):
    __module__ = 'b'

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

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

相关问题 更多 >