Encontrei um bug no método transfere. Quando o valor demandado excede a soma do saldo com o limite, o saque na conta de origem não é realizado e a mensagem de erro é exibida corretamente, mas o depósito na conta de destino continua sendo executado. Fiz a seguinte correção nos trechos envolvidos:
def deposita(self, valor):
self.__saldo += valor
def saca(self, valor):
if self.__pode_sacar(valor):
self.__saldo -= valor
else:
print("O valor {} passou o limite".format(valor))
def transfere(self, valor, destino):
if self.__pode_sacar(valor): #Parece redundante, mas, sem esta verificação, o depósito na conta destino continua sendo feito, mesmo sem o saque
self.saca(valor)
destino.deposita(valor)
def __pode_sacar(self, valor):
return valor <= self.__saldo + self.__limite