Python模块中的多个类

ral*_*lph 38 python

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

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

mos*_*hez 32

从我所看到的典型Java项目中,这是一个有用的经验法则:

Java中最底层的包应该是Python中的文件

那是什么意思?如果您的Java项目是有条理的:

toplevel/
   subproject/
        Foo.java
        Bar.java
   subproject2/
        Baz.java
        Qux.java
Run Code Online (Sandbox Code Playgroud)

然后你的Python项目应该如下所示:

toplevel/
    subproject.py <-- put class Foo, Bar here
    subproject2.py <-- put class Baz, Qux here
Run Code Online (Sandbox Code Playgroud)

要注意的事情:组织:

  • 不要使用内部类.只需将类放在同一个模块中
  • 按照惯例,以_开头的东西都是"私有的"
  • 拥有"公共变量"是可以的


Tha*_*ira 8

这样想吧.

在java中你写的是一个类,在Python的情况下,你编写一个模块而不是一个类.所以一个模块可以包含几个类.每当您想要使用特定类时,首先导入相应的模块,然后调用该类来创建对象.

这是一个例子.

Classes.py(这是一个名为'Classes'的模块)


class MyClass(object):  


    def greet(self):
        print("Hello World")


class MyNextClass(object):

    def greetAgain(self):
        print("Hello again")
Run Code Online (Sandbox Code Playgroud)

现在我可以从任何我想要的地方导入这个模块


import Classes

if __name__ == '__main__':

    a=Classes.MyClass()
    a.greet()

    b=Classes.MyNextClass()
    b.greetAgain()
Run Code Online (Sandbox Code Playgroud)


Vla*_*ala 6

如有疑问,请查看Python的标准库:)

例如,标准日历模块包含31个类.所以是的,没关系.


Jef*_*ber 5

这样做是绝对正确的.模块分组相关功能.如果该功能在多个类(例如,Tree,Node,Leaf)中实现,则将它们放在一起是合适的.

模块与Java包关联得比Java类更紧密.您还可以将模块实现为以模块命名的文件夹,其中包含一个__init__.py文件(因此Python可以识别模块; __init__.py也可以选择包括初始化代码以及要导出的类,函数和子包的列表. )