繁体   English   中英

如何正确组织 class 方法的“辅助”方法

[英]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. 从方法#1开始
  2. 如果与辅助方法结合的主要方法变得太大(> 20-30 loc,或任何对您来说合理的界限),或不可读 - 使其成为 class 方法,如您在方法 #2 中所述
  3. 如果辅助方法对于 class 中的多个功能变得很常见 - 再次,使其成为 class 方法
  4. 如果辅助方法对于模块中的多个类变得通用 - 将其放在单独的文件中

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM