我正在尝试用Python构建应用程序。从C#/ Java背景回来,我喜欢每个文件一个类的方法。我希望我的项目树看起来像这样:
[Service]
[Database]
DbClass1.py
DbClass2.py
[Model]
DbModel1.py
DbModel2.py
TheService.py
[ServiceTests]
[Database]
DbClass1Tests.py
DbClass2Tests.py
[Model]
DbModel1Tests.py
DbModel2Tests.py
TheServiceTests.py
是否有可能以使包像Java的包或.NET的名称空间一样工作的方式创建包/模块,即在DbModel1Tests.py中:
import Service.Model
def test():
m = DbModel1()
我认为:对于1:我不明白为什么不这样做。我认为,不管使用哪种语言,这都是一个好主意,因为当您知道文件中只有一个类时,它可以使您快速了解文件中的内容。尽管我会为辅助类提供一个小例外,但是由于Python允许嵌套类,因此也可以很好地完成。
对于2:也可能。不过,在您的示例中,您可以简单地加载模块,从而使完整的名称空间可以使用其类和函数。
因此,如果您说import Service.Model
,则只能使用m = Service.Model.DBModel1()
来访问课程。
要将事物导入当前名称空间,请执行from Service.Model import *
(如果只需要该类,则执行from Service.Model import DBModel1
)。然后,您可以像现在一样进行操作:m = DBModel1()
。
Q1。您可以在Python中为每个文件样式使用1个类,但这是不寻常的。
Q2。您将不得不使用from Service.Model import *
并在Service/Model/__init__.py
中做一些通常不被接受的事情。避免在Python中使用import *
我对此的个人建议:Python是not C#/ Java。尝试使其弯曲以使其看起来像$ other_language会导致沮丧和糟糕的用户体验。
请记住:
Service.Model.DbModel1 import DbModel1
,看起来很糟。首选from service.model import DbModel1
:避免在文件名和目录名中使用大写字母,并在文件中按逻辑对类/函数进行分组(而不是像对每个文件系统使用1个类那样在目录中对它们进行分组。)每个模块可以有一个类,但这不是必需的。我想说这与每个模块的长度有关(保持它们不要太长总是一个好主意)。
Python系统是一组模块,每个模块都有一个目标,因此您需要使用最合适的方法来达到目标,它包含每个模块一个类或每个模块包含功能和类的组合。