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.

¿Cómo puedo pasar un objeto de clase como argumento a un método de otra clase?

Tengo dos clases:

Clase Clase que contiene a los estudiantes en una lista.
Y Estudiante.

Cada vez que actualizo la puntuación de un estudiante, quiero llamar a calculate_average para la Clase en la que está. El siguiente código no funciona por razones obvias, ya que no sé cómo darle a la Clase en la que está un estudiante como argumento de función.

class Clase:
    estudiantes = None

    def __init__(self):
        self.estudiantes = []

    def agregarEstudiante(self, estudiante):
        self.estudiantes.append(estudiante)

    def calcular_promedio(self):
        # suma las puntuaciones de los estudiantes y las divide por el número de estudiantes

class Estudiante:
    def __init__(self, nombre, puntuacion):
        self.nombre = nombre
        self.puntuacion = puntuacion

    def getInfo(self):
        return self.nombre, self.puntuacion

    def setPuntuacion(self, puntuacion):
        self.puntuacion = puntuacion
        Clase.calcular_promedio()

¿Cómo puedo hacer que esto funcione?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una forma de hacer que esto funcione es pasando el objeto Classroom como parámetro al método setScore de la clase Student. De esta manera, cada vez que se actualiza una puntuación para un estudiante, el objeto Classroom también se actualiza y se llama a su método calculate_average.

    Código modificado:

    class Classroom:
        students = None
    
        def __init__(self):
            self.students = []
    
        def addStudent(self, student):
            self.students.append(student)
    
        def calculate_average(self):
            # suma las puntuaciones de los estudiantes y las divide por el número de estudiantes
            total_score = 0
            num_students = len(self.students)
            for student in self.students:
                total_score += student.score
            return total_score / num_students
    
    class Student:
        def __init__(self, name, score, classroom):
            self.name = name
            self.score = score
            self.classroom = classroom
    
        def getInfo(self):
            return self.name, self.score
    
        def setScore(self, score):
            self.score = score
            self.classroom.calculate_average()
    

    Ahora, al crear un nuevo objeto Student, pasamos el objeto Classroom correspondiente como argumento:

    classroom1 = Classroom()
    student1 = Student("John", 85, classroom1)
    classroom1.addStudent(student1)
    
    # Actualizar puntuación para student1
    student1.setScore(90)
    

    Esto actualizará la puntuación para student1 y llamará al método calculate_average para classroom1, que devolverá la nueva puntuación promedio para la clase.

Comments are closed.