我正在创建一个类来扩展一个包,在类实例化之前我不知道我需要包的命名空间的哪个子集。我一直小心避免在我的 代码中发生 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/