【问题标题】:python: What's the rationale behind not allowing * in relative imports?python:在相对导入中不允许 * 的原因是什么?
【发布时间】:2011-09-09 14:56:22
【问题描述】:

在相对导入中不允许 * 的原因是什么?例如

from ..new_tool import *

或直接进行相对导入:

import ..new_tool

【问题讨论】:

  • from ..new_tool import * 不健康.. 它会导入 ..new_tool 下的所有内容。如果您声明的名称与导入的名称匹配,它可能会与您的方法名称或属性名称发生冲突。有时可能会出现循环依赖..
  • @Tauquir:这适用于任何import *,而不仅仅是相对的。
  • 仍在等待import * 部分的答案,这也不适用于常规部分

标签: python relative-path python-packaging


【解决方案1】:

禁止后者的原因是..new_tool不能用于表达式(PEP 328)

import .foo被禁止的原因 是因为之后

    import XXX.YYY.ZZZ

那么XXX.YYY.ZZZ 可用于 表达。但是

    .moduleY

不能用于 表达。

由于*-imports 在开发过程中应该只是一个快速破解,我怀疑相对*-imports 的功能被忽略了,因为它不是必需的。

【讨论】:

  • 嗯,我想他们可以做到import .foo as _foo。不过,您的代码中没有 import *s 很好。
  • 奇怪的是允许import ... as,但不允许import
  • 真的。实际上我猜你总是可以做from . import foo,所以你不会因为不能做import .foo而失去任何东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-20
  • 1970-01-01
  • 2016-03-29
  • 2020-09-24
  • 2018-07-20
  • 1970-01-01
相关资源
最近更新 更多