If I have a reference to a function I can check it\'s code object f.__code__
, get a signature, then perform later checks against this signature to see if the code c
You may to compare bytecode attributes on code object using method.__code__.co_code
. For example lets define two classes:
>>> class A:
... a = 1
... def b(self, b):
... print(self.a + b)
...
>>> class B:
... a = 1
... def b(self, b):
... print(self.a + b)
...
>>> A().b.__code__.co_code
'|\x00\x00j\x00\x00|\x01\x00\x17GHd\x00\x00S'
>>> B().b.__code__.co_code
'|\x00\x00j\x00\x00|\x01\x00\x17GHd\x00\x00S'
>>> A().b.__code__.co_code == B().b.__code__.co_code
True
and if method b
in class A
is changed:
>>> class A:
... a = 1
... def b(self, b):
... print(b + self.a)
...
>>> A().b.__code__.co_code
'|\x01\x00|\x00\x00j\x00\x00\x17GHd\x00\x00S'
>>> A().b.__code__.co_code == B().b.__code__.co_code
False
or use inspect method inspect.getsource(object) that:
Return the text of the source code for an object. The argument may be a module, class, method, function, traceback, frame, or code object. The source code is returned as a single string.
And if you want to know whether the code has changed in dynamic you may need to reload your class with importlib and compare bytecode.