jus*_*ess 2 python import namespaces
我正在创建一个扩展包的类,在类实例化之前,我不知道我需要包的命名空间的哪个子集.我一直小心避免命名空间冲突我的代码,所以,不
from package import *
Run Code Online (Sandbox Code Playgroud)
创建问题除了名称冲突?
是否更好地检查类的输入并仅导入我需要的名称(在运行时)__init__?
可以从set []导入python吗?
不
for name in [namespace,namespace]:
from package import name
Run Code Online (Sandbox Code Playgroud)
有道理吗?
我希望这个问题看起来不像是不必要的手动铃声,我只是对python的新手,并且不想做每一个'开头的指南'说不做的一件事(来自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.
Run Code Online (Sandbox Code Playgroud)不,这不会做你想要的 - name是一个标识符,因此,每次循环时,代码将尝试导入名称name,而不是与name变量引用的字符串对应的名称.
但是,你可以得到这样的"动态导入"的效果,使用__import__功能.有关详细信息,请参阅文档,并确保您有充分的理由首先使用它.我们在这里很快就进入了一些非常先进的语言用法,它通常不像它第一次出现那样必要.不要太聪明.我们讨厌他们狡猾的霍比特人.