python - 类内的辅助函数 - 各种方法的优缺点

标签 python class architecture

我正在考虑三种方法来实现辅助函数,即仅由类内的特定方法调用的函数。选项有:

  1. 定义外部函数
  2. 定义类的函数
  3. 在调用函数内定义一个函数

这是显示三个选项的最小代码:

class test(object):
    def mytest1(self, n):
        return outloop(n)


    def mytest2(self, n):
        return self.inloop(n)


    def inloop(self, n):
        if n < 0:
            return 0
        return self.inloop(n - 1) + 1


    def mytest3(self, n):
        def innerloop(n):
            if n < 0:
                return 0
            return innerloop(n - 1) + 1
        return innerloop(n)


def outloop(n):
    if n < 0:
        return 0
    return outloop(n - 1) + 1

我测试了性能,所有三个似乎大致相同。我的问题:您能否分享一下我在这三个选项之间进行选择时应该注意的一些注意事项?

我会很高兴获得关于何时应该使用每种架构的见解和指导。

最佳答案

从面向对象设计的角度来看,调用者组合方法调用来实现其结果比调用类本身更好。这为调用者的代码创造了更大的灵 active ,这在需求不断变化的世界中通常是一件好事。

就类中定义的辅助函数而言,问题是辅助函数是所调用方法的功能所固有的或必不可少的。换句话说,将功能拆分出来并创建两个有用的函数是否有意义,或者您真的只有一个有用的函数吗?

将辅助函数定义为外部函数时,相关函数应该放在一个类中,以使代码维护更容易。请记住,任何类(class)都应遵循 Single Responsibility Principle并且只有一个理由去改变。

关于python - 类内的辅助函数 - 各种方法的优缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43970005/

相关文章:

c++ - 全局命名空间好友类无法访问命名命名空间类的私有(private)成员

flash - 如何从 Adob​​e Flash 中的 AS3 类访问舞台

ruby-on-rails - 创建 gem 的标准

python - 使用不同的模板扩展语句 {% block%} 的方法是什么?

python - 返回制表符分隔表的 API 请求存在问题

c++ - 通过指针访问数组

java - 项目架构,在核心和服务之间传输数据

python - 如何通过特定子/后代元素选择元素

python - Google Dataflow python 快速启动错误 - GcsIO 没有属性

.net - 如何防止两个应用程序因使用同一个数据库而发生冲突?