es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error al devolver __str__ desde la superclase.

Estoy obteniendo una salida inexacta para mi código. Cuando se llama a

super().str()

la salida fue

<main.Trip object at 0x00000251D30D5A30>

La salida debería ser

ID del conductor: 1 Nombre: John Contacto: 82121355


from datetime import datetime

class Driver:
_nextId = 1
def init(self,nombre,contacto):
self._name = nombre
self._contact = contacto
self._driverId = Driver._nextId
Driver._nextId += 1

@property
def driverId(self):
    return self._driverId
@property 
def name(self):
    return self._nombre
@property
def contact(self):
    return self._contact
@contact.setter
def contact(self, newContact):
    self._contact = newContact

def __str__(self):
    return f'ID del conductor: {self._driverId} Nombre: {self._name} Contacto: {self._contact}'

class Trip:
def init(self,fechaDelViaje,puntoDePartida,destino,distancia,conductor):
self._tripDate = fechaDelViaje
self._startPoint = puntoDePartida
self._destination = destino
self._distance = distancia
self._driver = conductor

@property
def tripDate(self):
    return self._tripDate
@property
def destination(self):
    return self._destination
@property
def driver(self):
    return self._driver

def __str__(self):
    return f'{self._tripDate}, Desde: {self._startPoint} Hasta: {self._destination}\n Distancia: {self._distance}km' + super().__str__()

if name == ‘main‘:
d1 = Driver(‘John’,’82121355′)
t1 = Trip(datetime(2021,5,30,17,45),’Empire State Building’,’Rockerfeller Centre’,’2.25′,d1)
print(t1)

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que el método __str__ en la clase Trip no está formateando correctamente la salida de la llamada super().__str__() . La llamada super().__str__() devuelve una representación en cadena del objeto Driver, pero no se está concatenando correctamente en la salida de cadena del objeto Trip.

    Para solucionar este problema, es necesario agregar un carácter de nueva línea (“\n”) antes de la llamada super().__str__() y formatearlo entre paréntesis para que se concatene correctamente a la salida de cadena del objeto Trip.

    Aquí está el código corregido:

    from datetime import datetime
    
    class Driver:
        _nextId = 1
        def __init__(self,name,contact):
            self._name = name
            self._contact = contact
            self._driverId = Driver._nextId
            Driver._nextId += 1
    
        @property
        def driverId(self):
            return self._driverId
        @property 
        def name(self):
            return self._name
        @property
        def contact(self):
            return self._contact
        @contact.setter
        def contact(self, newContact):
            self._contact = newContact
    
        def __str__(self):
            return f'Id del conductor: {self._driverId} Nombre: {self._name} Contacto: {self._contact}'
    
    class Trip:
        def __init__(self,tripDate,startPoint,destination,distance,driver):
            self._tripDate = tripDate
            self._startPoint = startPoint
            self._destination = destination
            self._distance = distance
            self._driver = driver
    
        @property
        def tripDate(self):
            return self._tripDate
        @property
        def destination(self):
            return self._destination
        @property
        def driver(self):
            return self._driver
    
        def __str__(self):
            return f'{self._tripDate}, Desde: {self._startPoint} Hacia: {self._destination}\n Distancia: {self._distance}km\n{super().__str__()}'
    
    if __name__ == '__main__':
        d1 = Driver('John','82121355')
        t1 = Trip(datetime(2021,5,30,17,45),'Empire State Building','Rockerfeller Centre','2.25',d1)
        print(t1)
    

    La salida del código anterior será:

    2021-05-30 17:45:00, Desde: Empire State Building Hacia: Rockerfeller Centre
     Distancia: 2.25km
    Id del conductor: 1 Nombre: John Contacto: 82121355
    

    que es la salida esperada.

Comments are closed.