【问题标题】:How to properly organize "helper" methods for a class method如何正确组织类方法的“帮助”方法
【发布时间】:2020-10-29 06:13:06
【问题描述】:

我有一个 Python 类,它有几个“主要”方法,它们依次修改它的一个属性,例如

def method1(self):
    # modify an attribute of self
    return self

def method2(self):
    # modify the same attribute of self
    return self 

每个核心方法依次调用多个“帮助”类方法,这些方法也修改相同的属性,即

def method1(self):
    self = self.helper_method1().helper_method2()
    return self

def method2(self):
    self = self.helper_method3().helper_method4()
    return 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

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

或者是否有第三种策略在性能、易读性和维护方面效果最佳?

【问题讨论】:

    标签: python class oop methods code-organization


    【解决方案1】:

    问题是你永远不知道你的设计应该有多灵活。一个极端情况是嵌套每个相关的辅助方法(您的方法#2)。另一个极端情况是将每个辅助方法放在一个单独的文件(模块)中,并将其命名为“method1_helper_utils.py”。除非您事先知道确切的软件设计,否则我建议您这样做:

    1. 从方法 #1 开始
    2. 如果主方法与辅助方法相结合变得太大(> 20-30 loc,或任何对您来说合理的范围)或不可读 - 将其设为类方法,如您在方法 #2 中所述李>
    3. 如果帮助方法对于类中的多个函数变得通用 - 再次将其设为类方法
    4. 如果帮助方法对于模块中的多个类变得通用 - 将其放在单独的文件中

    【讨论】:

    【解决方案2】:

    嵌套函数可以访问其外部函数范围内的变量。它就是所谓的function closure。我相信,如果这不是您所需要的,那么在这种情况下可能不需要嵌套函数。

    【讨论】:

      猜你喜欢
      • 2011-01-24
      • 2012-02-20
      • 1970-01-01
      • 1970-01-01
      • 2018-04-02
      • 1970-01-01
      • 1970-01-01
      • 2020-03-24
      • 1970-01-01
      相关资源
      最近更新 更多