Проверка на python, если к объекту обращались (не вызывали)

class A():
    def tmp(self):
        print("hi")

def b(a):
    a.tmp # note that a.tmp() is not being called. In the project I am working on, a.tmp is being passed as a lambda to a spark executor. And as a.tmp is being invoked in an executor(which is a different process), I can't assert the call of tmp

Я хочу проверить, был ли когда-либо вызван a.tmp. Как я могу это сделать? Обратите внимание, что я все еще не хочу издеваться над методом tmp() и предпочел бы что-то в строках проверки python, если метод вызывается без насмешки

1 ответ

Не проверено, и, вероятно, есть гораздо лучший способ Mock но в любом случае:

def mygetattr(self, name):
    if name == "tmp":
        self._tmp_was_accessed = True
    return super(A, self).__getattribute__(name)

real_getattr = A.__getattribute__
A.__getattribute__ = mygetattr
try:
    a = A()
    a._tmp_was_accessed = False
    b(a)
finally:
    A.__getattribute__  real_getattr
print(a._tmp_was_accessed)
Другие вопросы по тегам