我試圖從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