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.