import ctypes def display(self): """ A new kind of display """ return f'Print Type #2: ( {self.y1}, {self.y2} )' class MyStruct(ctypes.Structure): _fields_ = [ ('y1', ctypes.c_uint32), ('y2', ctypes.c_uint32) ] def __str__(self): return f'Print Type #1: [ {self.y1}, {self.y2} ]' class MyUnion(ctypes.Union): _fields_ = [ ('y1', ctypes.c_uint32), ('y2', ctypes.c_uint32) ] def __str__(self): return f'Print Type #1: [ {self.y1}, {self.y2} ]' if __name__ == '__main__': a = MyStruct() a.y1 = 10 a.y2 = 20 print('Using Structure:') print('----------------') print(a) print('Original :', MyStruct.__str__) # monkey patch __str__ with a different function. MyStruct.__str__ = display print('Patched :', MyStruct.__str__) print('Patched (dict) :', MyStruct.__dict__['__str__']) print(a) a = MyUnion() a.y1 = 10 a.y2 = 20 print('Using Union:') print('------------') print(a) print('Original :', MyUnion.__str__) # monkey patch __str__ with a different function. MyUnion.__str__ = display print('Patched :', MyUnion.__str__) print('Patched (dict) :', MyUnion.__dict__['__str__']) print(a)