__subclasses__not included in class specification. It is part of the class metatype ( typehere).
Python always , . Python __subclasses__, , type(classobj).__subclasses__(classobj) . , __subclasses__ .
, ; Mock __add__ __str__ create_autospec(), , Python type(mockinstance).__str__(mockinstance) __str__.
classobj.__subclasses__() , mock, ; , .
Mocks , - :
>>> m = create_autospec(A)
>>> m.__add__ = Mock()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/mj/Development/venvs/stackoverflow-2.7/lib/python2.7/site-packages/mock.py", line 767, in __setattr__
raise AttributeError("Mock object has no attribute '%s'" % name)
AttributeError: Mock object has no attribute '__add__'
:
>>> m.__dummy__ = Mock()
>>> m.__dummy__
<Mock name='mock.__dummy__' id='4427608656'>
A, __subclass__, :
>>> class AMockSpec(A):
... def __subclasses__(self): pass
...
>>> m = create_autospec(AMockSpec)
>>> m.__subclasses__ = Mock()
>>> m.__subclasses__.return_value = ['SomeMockValue']
>>> m.__subclasses__()
['SomeMockValue']