Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中调整完全限定类名的模块部分?_Python_Python 3.x - Fatal编程技术网

如何在Python中调整完全限定类名的模块部分?

如何在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的

下面的测试显示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的新手。

首先:您不需要这样做,而且可能不想这样做。标准库中有很多示例,说明文档用作导入位置的内容与对象上的实际模块信息不同:

>>> 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.