Я хочу смоделировать объект, производный от некоторого класса, я пробую приведенный ниже код, но получаю ошибку времени выполнения maximum recursion depth exceeded
. Я полагаю, что я не исправил средство получения атрибутов разумным образом и привел к мертвому циклу.
Как я могу только издеваться над данным атрибутом этого класса?
Есть ли разница между классом A.__getattribute__
и объектом a.__getattribute__
?
class A(object):
def __init__(self, val):
self.val = val
def get_val(self):
return self.val
def test_A_val(mocker):
a = A(True)
assert a.get_val()
mocker.patch.object(A, 'get_val', lambda x: False)
mocker.patch(__name__ + '.A.__getattribute__', wraps=lambda x: False if x == 'val' else getattr(A, x))
a = A(True)
assert not a.get_val()
assert not a.val
assert a.get_val()