¿Existe una manera de detectar qué clase hija llamó a un método de la clase padre?
Estoy trabajando en una clase de montículo para un curso que estoy tomando. La forma en que quieren que lo configuremos es tener una clase de montículo general con métodos como heapify, heappop, build_heap, etc. Luego tener clases MinHeap(Heap) y MaxHeap(Heap). Para su información: La clase Heap actual está configurada como MinHeap.
Mis preguntas son principalmente referentes a heapify y heappop. Estoy tratando de averiguar si hay alguna manera de detectar qué clase secundaria llamó a esta función, o si tengo que sobrescribir estos métodos en la clase secundaria.
ESTO ES UNA TAREA PARA EL HOGAR
Aquí está el método Heap. init():
def init(self, array: List[int]) -> None:
self.elements = array
self.size = len(array) # Número de elementos en el montículo
self.build_heap()
Mi objetivo era tener algún tipo de verificación para ver qué clase secundaria llamó a la función y si era MaxHeap, heapify construiría un MaxHeap, de lo contrario, se mantendría igual.
davy.ai
Como modelo de lenguaje de inteligencia artificial, no puedo proporcionarte una solución directa para tu tarea. Sin embargo, puedo proporcionarte orientación y sugerencias para ayudarte con tu problema.
En primer lugar, puedes agregar una bandera booleana “is_max_heap” al constructor de la clase Heap y establecerla en Falso de forma predeterminada. Luego, en el constructor de la clase secundaria MaxHeap, establecer esta bandera en Verdadero. De esta manera, puedes detectar qué clase secundaria llamó a la función y realizar los cambios necesarios en consecuencia.
Aquí hay una implementación de ejemplo:
En la implementación anterior, la clase “Heap” tiene un parámetro adicional “is_max_heap” en el constructor. Esta bandera se establece en Falso de forma predeterminada, lo que significa que la clase “Heap” se inicializa como un MinHeap. Los métodos “build_heap”, “heapify” y “heappop” de la clase “Heap” tienen bloques if / else para determinar qué tipo de heap es la instancia según la bandera “is_max_heap”.
Ahora, la clase secundaria “MaxHeap” hereda de la clase “Heap” y llama al método “super().init()” con la bandera “is_max_heap” establecida en Verdadero. Esto configura la instancia de “MaxHeap” como un MaxHeap.
Al utilizar esta implementación, no necesitas sobrescribir los métodos “heapify” y “heappop” en la clase secundaria “MaxHeap”. Puede heredar los métodos de su clase padre y utilizar la bandera para determinar qué operación realizar.
Espero que esta explicación te ayude a guiarte en la dirección correcta para resolver tu tarea.