Python 面向对象-组织大型课程
我开始为一些数学领域编写一个大型python库 所以我有这个数据结构(在类A中定义),它代表一个数学模型 我有一堆较小的函数,我把它们放在一个 A.f(),A.g() 计算更重要的函数A.X()、A.Y()、A.X()时,或多或少需要哪些“辅助函数”,。。。最终用户感兴趣的 当然,所有这些函数都依赖于A中的数据 但是,一个应用程序中的方法数量在不断增加,而且越来越令人困惑。如何将这样一个类分割成更小的部分。 比如说,包含基本操作的数据结构,以及对该结构进行计算的“方法”Python 面向对象-组织大型课程,python,class,oop,Python,Class,Oop,我开始为一些数学领域编写一个大型python库 所以我有这个数据结构(在类A中定义),它代表一个数学模型 我有一堆较小的函数,我把它们放在一个 A.f(),A.g() 计算更重要的函数A.X()、A.Y()、A.X()时,或多或少需要哪些“辅助函数”,。。。最终用户感兴趣的 当然,所有这些函数都依赖于A中的数据 但是,一个应用程序中的方法数量在不断增加,而且越来越令人困惑。如何将这样一个类分割成更小的部分。 比如说,包含基本操作的数据结构,以及对该结构进行计算的“方法” 什么是通常的方法和最具p
什么是通常的方法和最具python风格的方法?您可以使用纯函数方法和move方法,类用户不应该调用对象实例来分离文件 在纯函数方法中,函数不依赖于任何内部状态,没有副作用,只根据提供的参数计算返回值 举例说明如下所示:
# shape.py
class Shape:
def __init__(self, x, y):
self.x = x
self.y = y
def area(self):
return self.x * self.y
与:
当然,将Shape
类的area
方法提取到另一个文件中的一个单独函数中可能不是一个好主意,但是您完全可以将所有“helper函数”移动到单独的文件中,并从类方法中正确调用它们
这也将极大地简化助手函数测试。通常使用单下划线或双下划线作为“private”或helper方法的前缀,这些方法不是类的公共接口的一部分 一个影响是,例如,在类上调用
help
时,不会显示像\u my\u helper
这样的方法
更多详细信息请参见。尝试将数据结构分解为更小的对象,方法如下。另外,请查看PEP 8中的指南,并导入此。看起来您编写的类不是实际的类型-不要这样做。如果您有一个更具体的示例,可能会有所帮助
# 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