リードテーブルでドキュメントをコンパイルするには、モジュールh5pyをモックする必要があります。モックモジュールとサブクラス(TypeError:メタクラスベースを呼び出すときのエラー)
from __future__ import print_function
import sys
try:
from unittest.mock import MagicMock
except ImportError:
# Python 2
from mock import Mock as MagicMock
class Mock(MagicMock):
@classmethod
def __getattr__(cls, name):
return Mock()
sys.modules.update({'h5py': Mock()})
import h5py
print(h5py.File, type(h5py.File))
class A(h5py.File):
pass
print(A, type(A))
class B(A):
pass
このスクリプトの出力は次のとおりです:
<Mock id='140342061004112'> <class 'mock.mock.Mock'>
<Mock spec='str' id='140342061005584'> <class 'mock.mock.Mock'>
Traceback (most recent call last):
File "problem_mock.py", line 32, in <module>
class B(A):
TypeError: Error when calling the metaclass bases
str() takes at most 1 argument (3 given)
h5py
とh5py.File
を模擬するための正しい方法は何である私は、この単純なコードで再現することができ、エラーを取得しますか?
私は、この問題はいくつかのモジュールを嘲笑しなければならないreadthedocsのドキュメントではかなり一般的だと思います。コミュニティが答えを得ることは有益でしょう。
あなたには、 'Mock'を使用していますPython 2、Python 3の 'MagicMock' Python 3 *では、あなたのサブクラスのインスタンスを作成しようとすると無限の再帰があります。あなたのサンプルはPython 2でしか動作しません。しかし、 '__getattr__'がより多くの' MagicMock'インスタンスを返すように*サブクラスを作成する必要はありません。 –