我是Python的新手(我来自JAVA背景),我想知道是否有人可以帮助我使用一些Python标准。将多个类放入模块中是正常的还是“正确”的做法?我一直在使用Django并从教程开始,他们将数据库模型类放在同一个模块中。这是通常完成的事情,还是我应该坚持每个模块1个课程?有理由我会做一个而不是另一个吗?
希望我清楚而不是通用。提前感谢大家!
答案 0 :(得分:31)
以下是我从典型Java项目中看到的一个有用的经验法则:
Java中最底层的包应该是Python中的文件
这是什么意思? 如果您的Java项目是有条理的:
toplevel/
subproject/
Foo.java
Bar.java
subproject2/
Baz.java
Qux.java
然后您的Python项目应如下所示:
toplevel/
subproject.py <-- put class Foo, Bar here
subproject2.py <-- put class Baz, Qux here
要注意的事情:组织:
答案 1 :(得分:6)
如果有疑问,只需看看Python的标准库:)
例如,标准日历模块包含31个类。是的,没关系。
答案 2 :(得分:5)
这样做是绝对正确的。模块分组相关功能。如果该功能在几个类(例如,Tree,Node,Leaf)中实现,则将它们放在一起是合适的。
模块与Java包关联得比Java类更紧密。您还可以将模块实现为以模块命名的文件夹,其中包含__init__.py
文件(因此Python可以识别模块; __init__.py
也可以选择包含初始化代码和类列表,要导出的函数和子包。)
答案 3 :(得分:5)
这样想。
在java中你写的是一个类,在Python的情况下,你编写一个模块而不是一个类。所以一个模块可以包含几个类。 每当您想要使用特定类时,首先导入相应的模块,然后调用该类来创建对象。
这是一个例子。
Classes.py(这是一个名为'Classes'的模块)
class MyClass(object):
def greet(self):
print("Hello World")
class MyNextClass(object):
def greetAgain(self):
print("Hello again")
现在我可以从任何我想要的地方导入这个模块
import Classes
if __name__ == '__main__':
a=Classes.MyClass()
a.greet()
b=Classes.MyNextClass()
b.greetAgain()
答案 4 :(得分:4)
在Python中做这当然是正常的事情。何时以及为什么选择一个而不是另一个,部分是品味问题,部分是惯例。
如果您仍然了解Python及其惯例,那么阅读the style guide非常值得您花时间。