python:除了 namespace 冲突之外, from package import * 是否有缺点

标签 python namespaces import

我正在创建一个类来扩展一个包,在类实例化之前我不知道我需要包的命名空间的哪个子集。我一直小心避免在我的 代码中发生 namespace 冲突,

也是如此
from package import * 

除了名称冲突之外还会产生问题吗?

__init__ 中检查类的输入并仅导入我需要的名称(在运行时)是否更好??

python 可以从集合 [] 导入吗?

for name in [namespace,namespace]:
    from package import name

有什么意义吗?

我希望这个问题看起来不像是不必要的问候,我只是 python 的 super 新手并且不想做一件事每个“初学者指南”都说不要do (from pkg import * ) 除非我确定别无选择。

欢迎提出想法和建议。

最佳答案

按顺序:

  • 它不会产生其他问题 - 但是,名称冲突的问题可能比您预期的要严重得多。

  • 如果可以,绝对推迟进口。尽管 Python 变量作用域非常简单,但如果永远不会调用需要它的功能,您也可以获得不必导入模块的好处。

  • 我不明白你的意思。方括号用于制作列表,而不是集合。您可以在一行中从模块导入多个名称 - 只需使用逗号分隔的列表:

    from awesome_module import spam, ham, eggs, baked_beans
    # awesome_module defines lots of other names, but they aren't pulled in.
    
  • 不,那不会做你想要的 - name 是一个标识符,因此,每次循环代码都会尝试导入名称 name ,而不是与 name 变量引用的字符串相对应的名称。

但是,您可以使用__import__ 函数获得这种“动态导入”效果。请查阅文档以获取更多信息,并确保您有真正的理由首先使用它。我们在这里很快就了解了该语言的一些非常高级的用法,而且它通常并不像第一次出现时那么必要。不要太聪明了。我们讨厌他们狡猾的霍比特人。

关于python:除了 namespace 冲突之外, from package import * 是否有缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4313124/

相关文章:

c++ - 将单个类导入命名空间似乎要求命名空间之间不存在函数名称冲突

javascript - 将 JS Web 程序集导入 TypeScript

Python:模拟模块而不导入它或不需要它存在

c++ - 非限定名称查找找到内联命名空间成员

ruby-on-rails - Rails 命名空间模型给出未初始化的常量错误

vb.net - 新 pc 导致 "namespace of type specified in the imports doesn' t 包含任何公共(public)成员”在 VB.NET

python - 如何从Python中的继承类函数加载变量

python - 检查 Python 斐波那契数列生成器的效率?

python - heroku django 未能检测到 set buildpack

python - 在 matplotlib colorbar 中对齐刻度标签