栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

对于通过包和直接从同一模块导入的类型,isinstance失败

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

对于通过包和直接从同一模块导入的类型,isinstance失败

您不应该同时制作

lib
一个程序包并将其添加到中
PYTHONPATH
。这样就可以
lib.
直接或直接导入其模块,从而为失败做好准备。

如你看到的,

lib.Types.Custom != Types.Custom

因为Python导入的工作方式。

Python搜索导入路径并解析其找到的适当条目。

  • 导入时
    lib.Types
    ,它将
    lib
    目录导入为一个包,然后导入
    lib/Types.py
    为其中的子模块,
    lib
    lib.Types
    在中创建模块对象
    sys.modules
  • 当您导入
    Types
    ,它导入
    Types.py
    作为一个独立的模块,创建模块对象
    Types
    sys.modules

所以,

Types
lib.Types
最终成为两个不同的模块对象。Python不会检查它们是否是同一文件,以使事情变得简单并避免再次猜测。

(这实际上在Python的import System中的Unwary陷阱中列为“双重导入陷阱”。)


如果

lib
从中删除
PYTHONPATH
,则导入
lib/foo.py
将需要成为相对导入:

from .Types import Custom

或绝对导入:

from lib.Types import Custom


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/662715.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号