我确信这是微不足道的,但我无法理解。
目录结构:
mylib/__init__.py
mylib/MyClass.py
init .py读取:
import MyClass
__all__ = [MyClass]
MyClass.py:
class MyClass(object):
def __init__(self):
pass
我必须使用mylib.MyClass.MyClass()创建MyClass实例,当我希望它是mylib.MyClass()
我认为为了让这个工作,我必须把所有 = [MyClass.MyClass],但这不起作用。
你如何让这个工作?
NB。我明白这里发生了什么;文件本身就是一个命名空间,例如,你可以说,在一个文件中有多个类。但是,我在每个.py文件中只有一个类,所以我不希望这种程度的细节。
即。 我有这个:
>>> import mylib
>>> tmp = mylib.MyClass.MyClass()
我想要这个:
>>> import mylib
>>> tmp = mylib.MyClass()
答案 0 :(得分:8)
在__init__.py
中,import MyClass
尝试from MyClass import MyClass
。
前一个命令将模块的名称导入您的命名空间;第二个将符号从模块(在本例中为类的名称)导入到命名空间中。
此外,__all__
应该是名称的列表,,即字符串,而不是引用。
通常,Python将一个类别划分为一个文件没有任何优势,这样做有一些明显的缺点。通常,您的所有课程都在一个文件中,用户已经能够以mylib.MyClass
的形式访问您的课程。