我正在编写一个包含一堆成员函数的类,这些成员函数均使用不同的参数调用同一函数。我现在写的方式就像:
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)
.
.
.
这似乎令人难以置信,并且因为要占用太多空间而很难处理。这是处理具有相同结构的类函数的最佳方法,还是有更好的方法来处理此问题?
答案 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)