【问题标题】:Splitting a Python class among multiple modules using packages使用包在多个模块之间拆分 Python 类
【发布时间】:2012-11-04 02:05:15
【问题描述】:

我在 python 中作为一个类编写了一些代码,但现在我正试图将其作为一个包分发,我在弄清楚不同部分应该如何组合在一起时遇到了一些麻烦。

所以,当我最初编写代码时,我有一个包含一些函数的类,包括一个__init__ 函数。我现在已将这些函数中的每一个拆分到其自己的以函数名称命名的文件中,但我不确定将 init 函数放在哪里,因为它需要参数。下面是一个例子。

原始格式:

class className(object):

    def __init__(self, arg1, arg2):
         self.arg1 = arg1
         self.arg2 = arg2

    def func1(self):

    def func2(self, arg3):

使用:

import name

a = name.className(arg1, arg2)
a.func1()
a.func2(arg3)

现在文件树是:

Name/
    /className
        __init__.py
        func1.py
        func2.py

然后包括其他功能。我想保持与原来相同的基本使用模式。

现在,我的问题是__init__ 函数应该去哪里?在__init__.py 文件中?别的地方?另一个问题是我想在__init__.py 文件中添加一些导入;我知道它们应该放在__init__.py 文件中,但我不知道它们与__init__ 函数有什么关系。任何帮助表示赞赏。

【问题讨论】:

  • 如果您的类太大,您觉得需要将其拆分为多个文件,您可能需要考虑将其重构为单独的类。
  • 我实际上对如何创建包有一个错误的印象,但我想我现在已经弄清楚了。谢谢。

标签: python


【解决方案1】:

您不能将一个类拆分到多个文件中。一个包应该包含多个模块,这些模块是包含代码(完整的类、函数等)的文件。

__init__.py 文件在导入包时运行(尽管它很少用于实际执行大量代码)并告诉 Python 目录是包,而不是类的构造函数。

包(文件夹)应该是包和模块的集合,而模块(文件)应该是代码的集合。

正常层次结构的示例:

- somepackage (Folder)
    - __init__.py (File)
    - somemodule.py (File)
        - SomeClass (Code)
        - some_function (Code)

最后一点,我说您不能将一个类拆分为多个文件 - 从技术上讲,您可以通过将函数修补到类中或其他类似的怪异来做到这一点,但您永远不想这样做,因为它会模糊你的代码很多。

【讨论】:

  • 谢谢。这实际上也为我清除了其他一些事情。
猜你喜欢
  • 1970-01-01
  • 2018-01-23
  • 2011-12-09
  • 2019-10-18
  • 2017-04-11
  • 1970-01-01
  • 2014-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多