课堂内的助手功能 - 各种方法的优点和缺点

时间:2017-05-15 00:13:32

标签: python class architecture

我正在考虑实现helpers函数的三种方法,即只能通过类中的特定方法调用的函数。选项包括:

  1. 定义外部函数
  2. 定义班级的功能
  3. 在调用函数
  4. 中定义一个函数

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

    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
    

    我测试了表演,三者似乎大致相同。我的问题:在三种选择之间进行选择时,您能否分享一些我应该注意的注意事项?

    我希望获得有关您何时应该使用每种内容的架构洞察力和指导。

2 个答案:

答案 0 :(得分:1)

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

就所述类中定义的辅助函数而言,问题是所调用方法的功能内在或必不可少的辅助函数。换句话说,将功能分开并创建两个有用的功能是否有意义,或者你真的只有一个有用的功能。

在将辅助函数定义为外部函数方面,相关函数应该放在一个类中,以便于代码维护。请记住,任何课程都应遵循Single Responsibility Principle并且只有一个理由可以改变。

答案 1 :(得分:0)

如果你只是在课堂外使用普通函数,那么测试会更容易。