Python模块中的多个类

时间:2010-04-14 01:57:27

标签: python

我是Python的新手(我来自JAVA背景),我想知道是否有人可以帮助我使用一些Python标准。将多个类放入模块中是正常的还是“正确”的做法?我一直在使用Django并从教程开始,他们将数据库模型类放在同一个模块中。这是通常完成的事情,还是我应该坚持每个模块1个课程?有理由我会做一个而不是另一个吗?

希望我清楚而不是通用。提前感谢大家!

5 个答案:

答案 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非常值得您花时间。