定义所有使用不同参数调用同一函数的类函数的漂亮方法

时间:2018-10-25 17:08:59

标签: python

我正在编写一个包含一堆成员函数的类,这些成员函数均使用不同的参数调用同一函数。我现在写的方式就像:

class ExampleClass:
    def a_function(self,args):
        do_something

    def func1(self):
        return self.a_function(arg1)

    def func2(self):
        return self.a_function(arg2)
        .
        .
        .  

这似乎令人难以置信,并且因为要占用太多空间而很难处理。这是处理具有相同结构的类函数的最佳方法,还是有更好的方法来处理此问题?

1 个答案:

答案 0 :(得分:2)

由于函数是Python中的一流对象,因此您可以在另一个内部创建并返回一个对象。这意味着您可以定义一个辅助函数,并在类中使用它来摆脱一些样板代码:

class ExampleClass:
    def a_function(self, *args):
        print('do_something to {}'.format(args[0]))

    def _call_a_function(arg):
        def func(self):
            return self.a_function(arg)
        return func

    func1 = _call_a_function(1)
    func2 = _call_a_function(2)
    func3 = _call_a_function(3)


if __name__ == '__main__':
    example = ExampleClass()
    example.func1() # -> do_something to 1
    example.func2() # -> do_something to 2
    example.func3() # -> do_something to 3

如果您使用的是最新版本的Python,则甚至不必编写辅助函数,因为有一个内置的名为partialmethod的函数:

from functools import partialmethod  # Requires Python 3.4+

class ExampleClass2:
    def a_function(self, *args):
        print('do_something to {}'.format(args[0]))

    func1 = partialmethod(a_function, 1)
    func2 = partialmethod(a_function, 2)
    func3 = partialmethod(a_function, 3)