有了这个简单的模块:如何从iPython中的命名空间隐藏导入的模块?
#!/usr/bin/python
#file: foo.py
import ctypes
class Foo(ctypes.Structure):
pass
在IPython中:
In [1]: import foo
In [2]: foo.
Foo
ctypes
是模块foo
内部使用的模块,它不应该被显示给用户。我们的目标是通过ipython
隐藏以提供自动完成功能此解决方案是否太麻烦?
import ctypes as __ctypes
我会说这太麻烦了,是的(最多使用一个下划线)。 *为什么要隐藏模块名称空间中的一些名称?您是否考虑过使用'__all__'(请参阅http://stackoverflow.com/q/44834/3001761),如果这是通配符导入的问题? – jonrsharpe
如果用户不知道“ctypes”是我的模块使用的模块,但不是它的一个功能,用户可能会感到困惑。我期待用户使用自动完成来查看他可以使用什么对象。一种解决方案是在所有可用方法所在的模块内创建一个静态类。我认为这不是一个更好的解决方案 – nowox
为什么你认为任何人会被这个困惑?不需要静态类,你可以公开一个应该使用的属性名称列表(就像'__all__',甚至可以使用这个名称!),但是只要你有任何导入,并且很少被证明是一个棘手的问题。 – jonrsharpe