如何为 class 方法正确组织 "helper" 方法
How to properly organize "helper" methods for a class method
我有一个 Python class 有几个“主要”方法,这些方法连续修改它的一个属性,例如
def method1(self):
# modify an attribute of self
return self
def method2(self):
# modify the same attribute of self
return self
这些核心方法中的每一个依次调用多个“助手”class 方法,这些方法也修改相同的属性,即
def method1(self):
self = self.helper_method1().helper_method2()
return self
def method2(self):
self = self.helper_method3().helper_method4()
return self
对于这些“辅助”方法应该在 class 中定义的位置(在什么级别)是否达成共识?
即这是:
def helper_method1_to_be_called_by_method1(self):
# modify at attribute of self
return self
def helper_method2_to_be_called_by_method1(self):
# modify at attribute of self
return self
def method1(self):
self = self.helper_method1().helper_method2()
return self
更喜欢这个(反之亦然):
def method1(self):
def helper_method1_to_be_called_by_method1(self):
# modify at attribute of self
return self
def helper_method2_to_be_called_by_method1(self):
# modify at attribute of self
return self
self = self.helper_method1().helper_method2()
return self
或者是否有第三种策略在性能、易读性和维护方面效果最好?
问题是您永远不知道您的设计应该有多灵活。一种极端情况是嵌套每个相关的辅助方法(您的方法 #2)。另一种极端情况是将每个辅助方法放在一个单独的文件(模块)中,并将其命名为“method1_helper_utils.py”。除非您事先知道确切的软件设计,否则我建议您这样做:
- 从方法 #1 开始
- 如果 main 方法与 helper 方法相结合变得太大(> 20-30 loc,或者任何对您来说合理的范围),或者不可读 - 将其设为 class 方法,如您在你接近#2
- 如果辅助方法对于 class 中的多个函数变得通用 - 再次将其设为 class 方法
- 如果辅助方法对于一个模块中的多个 class 是通用的 - 将它放在一个单独的文件中
嵌套函数可以访问其外部函数范围内的变量。也就是所谓的function closure
。我相信,如果这不是您所需要的,那么在这种情况下可能不需要嵌套函数。
我有一个 Python class 有几个“主要”方法,这些方法连续修改它的一个属性,例如
def method1(self):
# modify an attribute of self
return self
def method2(self):
# modify the same attribute of self
return self
这些核心方法中的每一个依次调用多个“助手”class 方法,这些方法也修改相同的属性,即
def method1(self):
self = self.helper_method1().helper_method2()
return self
def method2(self):
self = self.helper_method3().helper_method4()
return self
对于这些“辅助”方法应该在 class 中定义的位置(在什么级别)是否达成共识?
即这是:
def helper_method1_to_be_called_by_method1(self):
# modify at attribute of self
return self
def helper_method2_to_be_called_by_method1(self):
# modify at attribute of self
return self
def method1(self):
self = self.helper_method1().helper_method2()
return self
更喜欢这个(反之亦然):
def method1(self):
def helper_method1_to_be_called_by_method1(self):
# modify at attribute of self
return self
def helper_method2_to_be_called_by_method1(self):
# modify at attribute of self
return self
self = self.helper_method1().helper_method2()
return self
或者是否有第三种策略在性能、易读性和维护方面效果最好?
问题是您永远不知道您的设计应该有多灵活。一种极端情况是嵌套每个相关的辅助方法(您的方法 #2)。另一种极端情况是将每个辅助方法放在一个单独的文件(模块)中,并将其命名为“method1_helper_utils.py”。除非您事先知道确切的软件设计,否则我建议您这样做:
- 从方法 #1 开始
- 如果 main 方法与 helper 方法相结合变得太大(> 20-30 loc,或者任何对您来说合理的范围),或者不可读 - 将其设为 class 方法,如您在你接近#2
- 如果辅助方法对于 class 中的多个函数变得通用 - 再次将其设为 class 方法
- 如果辅助方法对于一个模块中的多个 class 是通用的 - 将它放在一个单独的文件中
嵌套函数可以访问其外部函数范围内的变量。也就是所谓的function closure
。我相信,如果这不是您所需要的,那么在这种情况下可能不需要嵌套函数。