如何在Python中调整完全限定类名的模块部分?
下面的测试显示Python将A解释为dir.A.A。如何使Python将A解释为dir.A 我知道下面的内容可以产生我想要的结果,但我想在不改变目录/文件结构的情况下实现它如何在Python中调整完全限定类名的模块部分?,python,python-3.x,Python,Python 3.x,下面的测试显示Python将A解释为dir.A.A。如何使Python将A解释为dir.A 我知道下面的内容可以产生我想要的结果,但我想在不改变目录/文件结构的情况下实现它 $ ls dir.py main.py $ cat dir.py class A(): pass $ cat main.py from dir import A print(A) $ python3 main.py <class 'dir.A'> 或者,我不应该关心这个吗?我是Python的
$ ls
dir.py main.py
$ cat dir.py
class A():
pass
$ cat main.py
from dir import A
print(A)
$ python3 main.py
<class 'dir.A'>
或者,我不应该关心这个吗?我是Python的新手。首先:您不需要这样做,而且可能不想这样做。标准库中有很多示例,说明文档用作导入位置的内容与对象上的实际模块信息不同:
>>> from unittest import TestCase
>>> TestCase
<class 'unittest.case.TestCase'>
这与模块上的_name __属性的值相同。它在一个模块内以全局的形式提供,在_init _;中,您可以使用
from .a import A
A.__module__ = __name__ # rehome here.
对于像pickle这样的工具,这仍然可以,因为在dir模块中实际上有一个dir.a引用 我不明白这个问题。dir.A和dir.A.A是同一件事。我不明白为什么您希望将模块部分添加到完全限定类名中,以及为什么您不希望更改文件结构。这只是人类的一个信息。您的两个代码示例对我来说都很好。您为什么关心这个问题?还没有测试过,但请尝试在dir/\uuu init\uuuuuuuy.py中添加行uuu all\uuuuuu=['A']。我不想更改dir/file结构的原因是我要创建许多类,我不想将它们打包到一个文件dir.py中。关于类名,如果Python工程师不关心这个差异,那么作为一个答案也可以,尽管在其他语言中dir.A和dir.A.A是不同的。谢谢。我知道模块部分可以通过_模块_来更改,同时,我不必这样做。
>>> class A():
... pass
...
>>> A
<class '__main__.A'>
>>> A.__module__
'__main__'
>>> A.__module__ = 'dir'
>>> A
<class 'dir.A'>
from .a import A
A.__module__ = __name__ # rehome here.