次の Python クラスがあります。
class class A:
"""a class that increments internal variable"""
def __init__(self, x):
self._x = x
def incr(self):
self._x = (self._x + 1) % 10
return self._x
コンストラクターと別のメソッドだけを持つそのようなクラスは、実際には関数に置き換えるだけでよいという話を聞いたことがあります。
だからここに私の試みがあります(Python 2.7の場合):
def incrX(x):
"""closure that increments internal variable"""
d = {'x' : x}
def incr():
d['x'] = (d['x'] + 1) % 10
return d['x']
return incr
それを実行する:
def test1():
"""testing closure vs. class"""
print 'class...'
a = A(10)
print a.incr()
print a.incr()
print 'closure...'
incr = incrX(10)
print incr()
print incr()
$ python closure.py
running closure experiments
class...
1
2
closure...
1
2
だから私の質問は:
A のようなクラスをクロージャに置き換えるメリットはありますか? クロージャーをよりよく理解しようとしているだけです。