NEW
Font size
WorksheetsPython - POO Avanzada
Total questions: 15
Worksheet time: 8mins
En Python, ¿qué sucede si defines dos métodos con el mismo nombre exacto dentro de una misma clase (intentando hacer sobrecarga tradicional)?
Python ejecuta ambos métodos secuencialmente.
Se genera un error de sintaxis inmediatamente al ejecutar el código.
El segundo método definido reemplaza o sobrescribe al primero.
Python selecciona automáticamente cuál usar dependiendo de los argumentos enviados.
Analice la siguiente definición de método. ¿Cuál es la estrategia utilizada para simular la sobrecarga de métodos en Python?
Uso de herencia múltiple.
Uso de argumentos por defecto o parámetros opcionales.
Definición de múltiples decoradores sobre la función.
Polimorfismo de clases abstractas.
¿Cuál es el propósito principal del método especial __str__ en una clase?
Permitir que el objeto sea eliminado de la memoria manualmente.
Devolver una representación en texto amigable y legible para el usuario final.
Devolver una representación técnica e inequívoca para uso del desarrollador.
Convertir todos los atributos del objeto en números enteros.
En el contexto de relaciones entre objetos, ¿cómo se define la "Colaboración"?
Cuando una clase hereda todos los atributos de otra.
Cuando un objeto utiliza a otro temporalmente para realizar una tarea, sin ser su dueño.
Cuando un objeto crea a otro dentro de su constructor.
Cuando dos objetos comparten las mismas variables globales.
Según los diagramas UML vistos, ¿qué representa un rombo negro (relleno) en la línea que une dos clases?
Una relación de Herencia simple.
Una relación de Agregación (relación débil).
Una relación de Composición (relación fuerte de vida/muerte).
Una relación de dependencia temporal.
Si un atributo se define a nivel de clase (fuera del __init__), como valor_uf_actual = 3600 en el proyecto del Departamento que hicimos en clases, ¿qué característica principal tiene?
Es un valor que es compartido por todas las instancias de esa clase.
Es un valor único y diferente para cada objeto creado.
Es un valor privado que no puede ser leído desde fuera de la clase.
Es un valor constante que nunca puede ser modificado durante la ejecución.
¿Cuál es la función del decorador @classmethod aplicado a un método, como en cambiar_valor_uf?
Convertir el método en una función estática que no recibe parámetros.
Permitir que el método acceda y modifique atributos de la instancia específica (self).
Permitir que el método reciba la clase (cls) como primer parámetro y modifique el estado global de la clase.
Proteger el método para que sea privado y no accesible desde fuera.
En una relación de "Composición" (como Automóvil y Motor), ¿qué sucede normalmente con el componente (Motor) si el objeto principal (Automóvil) es destruido?
El componente sigue existiendo de forma independiente en la memoria.
El componente es transferido automáticamente a otro objeto principal.
El componente también deja de existir, ya que su ciclo de vida depende del principal.
El componente se guarda en un archivo de respaldo.
¿Qué imprimirá la consola si intentas usar print(objeto) en una clase que NO tiene definido el método __str__?
Imprimirá el valor del primer atributo definido en el constructor.
Generará un error indicando que el objeto no es imprimible.
Imprimirá una representación técnica por defecto con la dirección de memoria (Hash Code).
Imprimirá el nombre de la clase seguido de paréntesis vacíos.
Analice el siguiente código de Composición. ¿Qué ocurrirá al ejecutar la última línea?
La batería sigue accesible porque se creó como una clase separada.
La batería se elimina junto con el celular y no es posible acceder a ella.
Python mueve la batería a una variable global automáticamente.
Se lanza una excepción antes de eliminar el celular pidiendo confirmar la acción.
Usted está diseñando un sistema para un Colegio. Un "Curso" tiene muchos "Alumnos". Si el Curso se cierra o elimina, los Alumnos NO deben dejar de existir, ya que pueden matricularse en otro curso. ¿Qué tipo de relación debe implementar?
Composición.
Agregación.
Herencia.
Sobrecarga.
Observe el siguiente código sobre atributos de clase. ¿Cuál será la salida final?
1.19 (Mantiene el valor original con el que nació).
1.25 (Se actualiza porque el atributo es compartido).
None (El atributo se reinicia al modificarse externamente).
Error (No se puede modificar un atributo de clase desde fuera).
Analice la lógica de este método de pago con conversión de moneda. ¿Qué problema lógico tiene este código si el objetivo es pagar una deuda en UF usando Pesos?
El cálculo está multiplicando en lugar de dividir, lo que reducirá la deuda excesivamente rápido.
No se está validando si los pesos son negativos.
El método falla porque no puede acceder a self.valor_uf.
El código es correcto y funcionará según lo esperado.
Respecto a la encapsulación y los métodos de acceso ("Getters" y "Setters"). Si un atributo está definido como _saldo (privado), ¿cuál es la forma correcta de permitir que un código externo lo modifique aplicando reglas de validación?
Haciéndolo público al atributo quitándole los guiones bajos.
Accediendo directamente a objeto._Clase__saldo para saltarse la protección.
Creando un método público (Setter) que reciba el valor, lo valide con un if, y luego lo asigne.
Usando un método estático que no pertenezca a la instancia.
Imagine que tiene una lista de objetos Producto. Al imprimir la lista completa con print(lista_productos), usted ve códigos extraños en lugar de los nombres, aunque la clase Producto tiene definido el método __str__. ¿Cuál es la explicación técnica de esto?
Python ignora el método __str__ cuando los objetos están dentro de una lista y usa __repr__ (o el defecto) para los elementos.
El método __str__ está mal escrito y tiene errores de sintaxis.
Las listas en Python no pueden contener objetos personalizados.
Es necesario llamar manualmente a un método .mostrar_lista() para ver el contenido.
