繁体   English   中英

Python:“ import package1.module1”的导入行为不一致吗?

[英]Python: Inconsistent importing behavior for “import package1.module1”?

我当时以这种形式的陈述

import package1.module1

用于模块而不适用于模块中的对象 ,因此例如,如果module1包含variable1 ,则无法执行

import package1.module1.variable1

这是感知到的不一致:假设module1variable1具有相同的名称,例如,假设两者都称为module1 而且,在package1__init__.py ,我有

from .module1 import module1

然后做

import package1.module1

将导入对象 module1 ,而不是模块 module1 module1对象模块名称相同时,此方法有效。

官方说明可以在docs中找到:

import语句首先测试项目是否在包装中定义; 如果不是,则假定它是一个模块并尝试加载它。 如果找不到它,则会引发ImportError异常。

似乎import似乎认为来自模块module1的对象module1是一个模块,这就是为什么import package1.module1起作用但产生该对象的原因。

就一种解决方法而言,如果您尝试将from _ import _ as x ,将重命名该属性并绕开名称阴影。 它应该产生您想要的结果-模块module1的路径导入(因为Python会看到类型<module> ),而不是变量module1的对象导入。

以下是一些代码输出,可帮助您更清楚地说明问题:

>>> import package1.module1
>>> print(package1.module1)
<module 'package1.module1' from 'package1/module1.pyc'>
>>> from package1.module1 import module1
>>> print(module1)
1
>>> from package1 import m
>>> print(m)
1

在这里,我没有from module1 import module1 as m__init__.pypackage1和我的设置module1变到1 module1.py

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM