所以我在Python中有一个我自己的小项目,我想经常使用它。目前,它由两个类组成,我们称之为类Aclass
和Bclass
。
两个类合并的代码量很大。如此之大,以至于我不想拥有将它们放在一个文件中,所以我为每个文件创建了一个文件。我将第一个放入文件aclass.py
,第二个放入bclass.py
,所以我的结构现在看起来像这样:
my_project/
aclass.py
bclass.py
__init__.py
我想要的是能够从python调用我的项目并准备好类,如下所示:
import my_project
a_instance = my_project.Aclass()
b_instance = my_project.Bclass()
目前,我要做的是
import my_project
a_instance = my_project.aclass.Aclass()
如果你问我,这是多余的。在问题中:
Avoid double typing class names in python
我看到了建议
from aclass import Aclass
from bclass import Bclass
进入__init__.py
文件,但这会导致混淆,因为如果我这样做,我可以通过编写
import my_project
a_instance = my_project.Aclass()
或写作
import my_project
a_instance = my_project.aclass.Aclass()
我觉得这个解决方案很丑陋,因为它不仅会“复用”函数(同时创建aclass.Aclass()
和Aclass()
,而且还意味着Aclass类的任何实例现在都是Python的眼睛,
<class my_project.aclass.Aclass at ******************>
而不是
<class my_project.Aclass at ******************>
因此,我的问题是:
我的问题是否有解决方案,Aclass
将直接放在my_project
包中而不将该类写入__init__
文件?
答案 0 :(得分:3)
否强>;你只有两个选择:
__init__.py
来定义库顶层的可用内容,并接受这意味着指向对象的多条路径。对于超出少数几个类别和职能的任何项目,后者显然更可取;它被广泛用于标准库及其他领域。例如,对于the json
library,__init__.py
包含from .decoder import JSONDecoder
:
>>> import json
>>> json.JSONDecoder
<class 'json.decoder.JSONDecoder'>
>>> json.JSONDecoder is json.decoder.JSONDecoder
True
在绝大多数情况下,您的代码的任何用户都将使用较短的名称而不是较长的名称,但是,当它们指向同一个对象时,如果它们不是真的重要混合搭配,你很少有机会看到“Python认为”完全合格的班级名称。