私のコードの一部では、Pythonデコレータライブラリのメモ化されたクラスを使用しています。
私が使用しているライブラリの1つは、関数のイントロスペクションを使用して、必要な引数の数を取得し、装飾された関数では失敗します。具体的には、co_argcount
変数をチェックします。
if (PyInt_AsLong(co_argcount) < 1) {
PyErr_SetString(PyExc_TypeError, "This function has no parameters to mini\
mize.");
argcountがメモ化された関数に転送されていないようです。
>>> def f(x):
... return x
...
>>> f.func_code.co_argcount
1
>>> g = memoized(f)
>>> g.func_code.co_argcount
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'memoized' object has no attribute 'func_code'
メモ化された関数が元の関数のように見え、味わい、匂いがするように、メモ化されたクラスを変更するにはどうすればよいですか?