繁体   English   中英

我应该在自己的.py文件中创建每个类吗?

[英]Should I create each class in its own .py file?

一般来说,我对Python还是很陌生。

我知道我可以在同一个.py文件中创建多个类,但是我想知道是否应该在自己的.py文件中创建每个类。

例如,在C#中,我将拥有一个处理所有数据库交互的类。 然后是另一个具有业务规则的类。

在Python中是这种情况吗?

否。典型的Python风格是将相关类放在同一模块中。 一个类可能最终以其自己的模块结束(特别是如果是一个大类),但它本身并不是目标。 而且,当您这样做时,请不要在课程后给模块命名,否则最终会使自己和其他人混淆哪个是哪个。

每个.py文件代表一个模块,因此您应该将逻辑功能,常量和类的组放在同一文件中。

.py文件中的每个类只会在模块表中创建史诗般的膨胀,因为如果您只对一个类感兴趣,您仍然可以

from whatever import SomeClass

我不同意其他人的说法,是的。 对我来说,将每个类放在自己的文件(模块)中效果更好。 但是也有例外,所以让我举一个例子来解释。

如果您有Foo类,则将其放入名为Foo.py的文件中,其中包含以下部分:

  1. 进口货
    • 这是您引入依赖关系的地方。
    • 示例: from Bar import * import math from Bar import *
  2. 全球
    • 在这里定义模块的外部接口,这些外部接口是在模块外部可见的所有符号。
    • 例如: __all__ = ['Foo']
    • 您也可以在此处定义全局变量(错误)和全局常数(良好)。 这些全局变量不需要导出; 可以将它们设为全局代码只是为了简化代码。
    • 示例: PI = 3.14159意味着您可以编写PI ,而如果在类Foo中定义了PI ,则需要编写Foo.PI
  3. 功能
    • 在这里定义所有与类Foo相关但不属于类Foo命名空间的顶级函数。 由于类同时允许使用@staticmethods和内部类,因此它们可能很少见。
    • 示例: def print_foo(foo): print(foo)
  4. 班级
    • 示例: class Foo(object): pass

有时您可能想在同一模块中放置多个类。 当两个或多个类在概念上与几乎总是一起使用它们而从未独立使用它们有关时,应该执行此操作。 这是例外,不是常规。 在这种情况下,请将所有类名添加到__all__全局__all__

最后,对于每个模块Foo.py,都应该有一个名为testFoo.py的相应单元测试模块。

值得一提的另一点是,如果文件太大,则始终可以将其转换为程序包,从而易于重组而不会破坏客户端的代码。

可能不会。 Python文件是“模块”。 模块应包含可独立重用的代码。 如果这包含几个类,这是正常的,那完全可以。

是的,每个类都在其自己的文件中。 在具有多个类的文件中甚至导入单个类(或函数),都会导致python执行文件中所有类的定义。 尝试这个:

manyClass.py

class foo():
   print 'a bunch of time consuming work'

class tryme():
   print 'try me'

现在在解释器外壳中键入此内容...

从许多类进口tryme

一堆费时的工作
试试我

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM