我试图从OOP转换到函数式编程。我有以下情况:(变量没有意义 - 它们只是例子)。Python:与闭包的继承等效
Funcs = namedtuple('Funcs', ('func1', 'func2'))
def thing_1(alpha, beta):
gamma = alpha+beta
def func_1(x):
return x+gamma
def func_2(x):
return x*gamma
return Funcs(func_1, func_2)
def thing_2(alpha, beta):
gamma = alpha+beta
delta = alpha*beta
def func_1(x):
return x+gamma
def func_2(x):
return x*gamma+delta
return Funcs(func_1, func_2)
现在,我们有一些代码重复:func_1
是两个东西是一样的。这两件事情也以同样的方式初始化gamma。
如果我使用OOP,很明显的事 - 做一个BaseThing
,使func_2
抽象,并有Thing1覆盖方法func_2
和Thing2
同时覆盖func_2
方法和__init__
(它将调用BaseThing.__init__
然后初始化增量)。
使用闭包,对我来说并不明显 - 做同样事情的最好方法是什么?
只需在'thing_1'和'thing_2'之外移动'func_1'即可。 – 2015-02-10 12:07:59
不能 - 它使用gamma,它只在thing_1,thing_2中定义。 – Peter 2015-02-10 12:20:43
因为Python已经有了一个完美的对象系统,所以不需要伪造一个闭包。函数式编程可以与OO一起工作。 – Marcin 2015-02-10 12:28:29