我有以下 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 这样的类有好处吗?只是想更好地理解闭包。