【问题标题】:OOP - organising big classes [closed]OOP - 组织大班[关闭]
【发布时间】:2015-04-26 05:59:30
【问题描述】:

我开始为某些数学领域编写一个 big python 库。

所以我有这个表示数学模型的数据结构(在 A 类中定义)。

我有一堆较小的函数,我把它们放在了A中:

A.f(), A.g(),...

计算最终用户感兴趣的更重要的函数 A.X(), A.Y(),... 或多或少是“辅助函数”。

所有这些功能当然都依赖于A中的数据。

但是 A 中的方法数量越来越多,越来越混乱。如何将这样一个类分成更小的部分。 比方说,其中包含基本操作的数据结构以及对结构进行计算的“方法”?

什么是常用的方法和最pythonic的方法?

【问题讨论】:

  • 尝试将数据结构分解成更小的对象,方法会随之而来。
  • 还可以查看 PEP 8 和 import this 中的指南。看起来您正在编写不是实际类型的类 - 不要那样做。
  • 如果你有一个更具体的例子可能会有所帮助

标签: python class oop


【解决方案1】:

您可以使用纯函数方法并将类用户不应该在对象实例上调用的方法移动到单独的文件中。

在纯函数方法中,函数不依赖于任何内部状态,没有副作用,并且仅根据提供的参数计算返回值。

举例说明如下:

# shape.py
class Shape:

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def area(self):
        return self.x * self.y

与:

# shape.py
class Shape:

    def __init__(self, x, y):
        self.x = x
        self.y = y

# func.py
def area(shape):
    return shape.x * shape.y

当然,将Shape类的area方法提取到另一个文件中的单独函数中可能不是一个好主意,但是您绝对可以将所有“辅助函数”移动到单独的文件中并正确调用它们来自类方法。

这也将大大简化辅助功能测试。

【讨论】:

    【解决方案2】:

    使用单下划线或双下划线为不属于类的公共接口的“私有”或辅助方法添加前缀是一种惯例。

    例如,当在类上调用 help 时,不会显示像 _my_helper 这样的方法。

    更多详情请见this post

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-06
      • 1970-01-01
      • 2016-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-05
      • 2017-08-16
      相关资源
      最近更新 更多