# Buggy code
def __str__(self):
    """Return a human readable version of this message"""
    return f"({type(self).__name__} {(self.obj_id, self.user, self.reason)})"


# Traceback (AttributeError)
Traceback (most recent call last):
File "/home/juanmixp/Documentos/PySyft/fii.py", line 12, in <module>
y = (x @ x).get().float_prec()
File "/home/juanmixp/Documentos/PySyft/syft/generic/frameworks/hook/hook.py", line 466, in overloaded_native_method
response = method(*new_args, **new_kwargs)
File "/home/juanmixp/Documentos/PySyft/syft/frameworks/torch/tensors/interpreters/precision.py", line 432, in matmul
response = getattr(new_self, "matmul")(*new_args, **new_kwargs)
File "/home/juanmixp/Documentos/PySyft/syft/frameworks/torch/tensors/interpreters/additive_shared.py", line 646, in matmul
return self._private_mul(other, "matmul")
File "/home/juanmixp/Documentos/PySyft/syft/frameworks/torch/tensors/interpreters/additive_shared.py", line 536, in _private_mul
shares = spdz.spdz_mul(cmd, self, other, self.crypto_provider, self.field, self.dtype)
File "/home/juanmixp/Documentos/PySyft/syft/frameworks/torch/mpc/spdz.py", line 40, in spdz_mul
delta = delta.reconstruct()
File "/home/juanmixp/Documentos/PySyft/syft/frameworks/torch/tensors/interpreters/additive_shared.py", line 321, in reconstruct
pointer = ptr_to_sh.remote_get()
File "/home/juanmixp/Documentos/PySyft/syft/generic/pointers/pointer_tensor.py", line 304, in remote_get
self.owner.send_command(message=("mid_get", self, (), {}), recipient=self.location)
File "/home/juanmixp/Documentos/PySyft/syft/workers/base.py", line 637, in send_command
ret_val = self.send_msg(message, location=recipient)
File "/home/juanmixp/Documentos/PySyft/syft/workers/base.py", line 290, in send_msg
bin_response = self._send_msg(bin_message, location)
File "/home/juanmixp/Documentos/PySyft/syft/workers/virtual.py", line 15, in _send_msg
return location._recv_msg(message)
File "/home/juanmixp/Documentos/PySyft/syft/workers/virtual.py", line 19, in _recv_msg
return self.recv_msg(message)
File "/home/juanmixp/Documentos/PySyft/syft/workers/base.py", line 326, in recv_msg
response = self._message_router[type(msg)](msg)
File "/home/juanmixp/Documentos/PySyft/syft/workers/base.py", line 468, in execute_tensor_command
return self.execute_computation_action(cmd.action)
File "/home/juanmixp/Documentos/PySyft/syft/workers/base.py", line 510, in execute_computation_action
response = getattr(_self, op_name)(*args_, **kwargs_)
File "/home/juanmixp/Documentos/PySyft/syft/frameworks/torch/tensors/interpreters/native.py", line 604, in mid_get
self.child.mid_get()
File "/home/juanmixp/Documentos/PySyft/syft/generic/object.py", line 112, in mid_get
tensor = self.get()
File "/home/juanmixp/Documentos/PySyft/syft/frameworks/torch/tensors/interpreters/additive_shared.py", line 240, in get
shares.append(share.get())
File "/home/juanmixp/Documentos/PySyft/syft/generic/pointers/pointer_tensor.py", line 334, in get
tensor = ObjectPointer.get(self, user=user, reason=reason, deregister_ptr=deregister_ptr)
File "/home/juanmixp/Documentos/PySyft/syft/generic/pointers/object_pointer.py", line 269, in get
obj = self.owner.request_obj(self.id_at_location, self.location, user, reason)
File "/home/juanmixp/Documentos/PySyft/syft/workers/base.py", line 750, in request_obj
obj = self.send_msg(ObjectRequestMessage(obj_id, user, reason), location)
File "/home/juanmixp/Documentos/PySyft/syft/workers/base.py", line 284, in send_msg
print(f"worker {self} sending {message} to {location}")
File "/home/juanmixp/Documentos/PySyft/syft/messaging/message.py", line 303, in __str__
return f"({type(self).__name__} {(self.obj_id, self.user, self.reason)})"
AttributeError: 'ObjectRequestMessage' object has no attribute 'obj_id'

# Fixed code
def __str__(self):
    """Return a human readable version of this message"""
    return f"({type(self).__name__} {self.object_id, self.user, self.reason})"