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.

Ejercicio de herencia: importar variables desde otra clase

En este ejercicio no puedo averiguar cómo importar datos de Person a IndividualBankAccount.

Específicamente, esta línea: def __init__(self, sort_code: int, account_number: int, owner: Person):

No estoy seguro de qué va aquí.

¿Cómo paso la variable owner: Person a super()?

class Person:
    nombre : str
    apellido : str
    _dirección : str

    def __init__(self, nombre: str, apellido: str):
        "crea una nueva persona con nombre nombre, apellido apellido y una dirección vacía"
        self.nombre = nombre
        self.apellido = apellido

class BankAccount:
    sort: int
    _num_cuenta: int

    def __init__(self, sort_code: int, account_number: int) -> None:
        '''crea una cuenta bancaria con el código de clasificación y el número de cuenta dados'''
        self.sort = sort_code
        self._num_cuenta = account_number

class IndividualBankAccount(BankAccount):

    _owner: Person

    def __init__(self, sort_code: int, account_number: int, owner: Person):
        '''crea una nueva cuenta bancaria con el código de clasificación, el número de cuenta y el propietario dados'''

        super().__init__(sort_code,account_number)
        self._owner = owner

    def get_account_data(self) -> str:
        '''devuelve la cadena "nombre_apellido_csc_nc" donde nombre y apellido son el primer y segundo nombre del propietario,
        csc es el código de clasificación y nc es el número de cuenta'''

        mi_string = f"{self._owner.nombre}_{self._owner.apellido}_{self.sort}_{self._num_cuenta}"
        return mi_string
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para pasar la variable owner: Person al constructor super(), simplemente debe incluirse como argumento al llamar super().__init__(sort_code, account_number). La palabra clave super() inicializa la clase padre BankAccount, la cual solo espera dos argumentos (sort_code y account_number) en su constructor. Sin embargo, como owner es un atributo adicional de IndividualBankAccount, se deberá establecer en el método __init__de IndividualBankAccount.

    Por lo tanto, puede pasar sort_code y account_number al constructor de BankAccount a través de super().__init__(sort_code, account_number) y establecer self._owner por separado en el método __init__ de IndividualBankAccount, de esta forma:

    class IndividualBankAccount(BankAccount):
    
      _owner: Person
    
      def __init__(self, sort_code: int, account_number: int, owner: Person):
        super().__init__(sort_code, account_number) # pasa sort_code y account_number al constructor de BankAccount
        self._owner = owner # establece el atributo owner para IndividualBankAccount
    
      def get_account_data(self)-> str:
        my_string =f"{self._owner._first_name} {self._owner._second_name} {self._sort} {self._account_num}"
        return my_string
    

    Ahora, cuando se llama a IndividualBankAccount.get_account_data(), debe obtenerse una cadena en el formato "FN LN SC AN", donde FN y LN son el primer y segundo nombre del propietario, respectivamente, ySC y AN son el código de clasificación y número de cuenta de la cuenta bancaria, respectivamente.

Comments are closed.