Estructuras y Clases

1

Programación Orientada a Objetos en Swift

2

Clases vs. Estructuras: Conceptos y Diferencias en Swift

3

Diferencias entre Estructuras y Clases en Swift: Copia de Valores vs Referencias

4

Clases en Swift: Datos por Referencia y Comparación de Objetos

Tipos de Propiedades

5

Programación Swift: Variables y Estructuras

6

Aprovecha las Kotlin Lazy Properties en Desempeño de Apps

7

Propiedades Computadas en Swift: Cálculo Automatizado de Valores

8

Variables de Sólo Lectura en Swift

9

Observadores de Properties en Swift: WillSet y DidSet

10

"Uso de la palabra clave 'static' en Swift"

Métodos, subíndices y herencia

11

Métodos en Clases y Estructuras: Creación y Uso Práctico

12

Métodos Mutables en Swift: Cambia Propiedades en Estructuras y Enumerados

13

Métodos Estáticos y Atributos Compartidos en Videojuegos

14

Subíndices en Swift: Implementación y Uso Práctico

15

Matrices: Manipulación y Operaciones Básicas

16

Herencia de Clases en Swift: Conceptos y Ejemplos Prácticos

17

Sobreescritura de Métodos y Propiedades en Python

Inicializadores o constructores

18

Conversión de Grados: Celsius, Fahrenheit y Kelvin

19

Clases y Constructores en Programación: Sintaxis y Modificación

20

Constructores designados y de conveniencia en Swift

21

Manejo de Constructores y Valores Nullable en Swift

22

Programación Orientada a Objetos: Constructores y Destructores en Java

Encadenamiento opcional

23

Encadenamiento de Opcionales en Swift

24

Creación de Clases y Gestión de Opcionales en Swift

25

Programación Segura con Opcionales en Swift

26

Encadenamiento de Opcionales en Swift: Cómo Evitar Errores Comunes

Conclusión

27

Programación en iOS con Swift: Fundamentos y Prácticas

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Sobreescritura de Métodos y Propiedades en Python

17/27
Recursos

¿Qué es la sobreescritura en programación orientada a objetos?

La sobreescritura es uno de los conceptos fundamentales en la programación orientada a objetos. Permite que una subclase pueda proporcionar su propia implementación de un método o propiedad que ya existe en una clase padre. En esencia, la sobreescritura le da a la subclase la habilidad de definir un comportamiento específico que reemplaza al de la superclase.

¿Cómo sobreescribir métodos y propiedades en Python?

Sobreescribir métodos y propiedades implica redefinirlos en una subclase para que esta utilice su propia versión, sin importar la implementación de su clase superior.

class Vehiculo:
    def haz_ruido(self):
        pass

class Tren(Vehiculo):
    def haz_ruido(self):
        print("Chucho Chucho")

tren = Tren()
tren.haz_ruido()  # Salida: Chucho Chucho

En este ejemplo, Tren hereda de Vehiculo y sobreescribe el método haz_ruido.

¿Cómo se utiliza super() para extender la funcionalidad?

El uso de super() permite invocar métodos de la clase padre, facilitando la extensión de funcionalidades sin sobreescribir completamente la implementación existente.

class Coche(Vehiculo):
    def __init__(self, velocidad):
        self.velocidad = velocidad

    def descripcion(self):
        return f'Viajando a {self.velocidad} km/h'

class CocheAutomatico(Coche):
    def descripcion(self):
        return super().descripcion() + ' en modo automático'

coche = CocheAutomatico(100)
print(coche.descripcion())  # Salida: Viajando a 100 km/h en modo automático

Aquí, CocheAutomatico extiende el método descripcion de Coche.

¿Qué es la palabra clave final y para qué se utiliza?

final es un modificador que indica que un método o una propiedad no deben ser sobreescritos más abajo en la jerarquía de herencia. Esto garantiza que ninguna subclase pueda alterar una implementación esencial de su clase base.

from typing import final

class Vehiculo:
    @final
    def tipo_vehiculo(self):
        return 'Vehículo'

class Coche(Vehiculo):
    # Intentar sobreescribir el método tipo_vehiculo resultará en un error.
    pass

En este caso, aplicar @final asegura que tipo_vehiculo no pueda ser modificado en Coche.

¿Cuándo usar la sobreescritura y la relación con otras clases?

La sobreescritura es clave cuando se necesita adaptar o personalizar el comportamiento de un método o propiedad en una subclase. Por ejemplo, una subclase de Vehiculo puede ser un Coche, y otro puede ser un Tren. Cada tipo de vehículo hace ruido de manera distinta, pero comparten el mismo método haz_ruido.

Ejercicio propuesto

Implementa el método haz_ruido en una subclase Bicicleta. ¿Crees que el ruido del Tándem será igual al de Bicicleta o necesitará su propia implementación? Explora la posibilidad de sobreescribir o no según tu juicio.

Recuerda, mientras más practiques con herencia y sobreescritura en tus proyectos, más cómodo te sentirás modelando problemas del mundo real en código. ¡Continúa desarrollando tus habilidades!

Aportes 7

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Buenos efectos de sonido de los vehículos

Esta clase te hace reflexionar que antes de ponerte a codear busques maquetear como podrías hacerlo.
Quizá eso mejore tu productividad y calidad de código.

Interesante esto en otros lenguajes se llama sobrecarga de funciones.

Se le puede aplicar el final a la propia clase para que esta no tenga propiedad de herencia ?

import UIKit

class Vehiculo{
var currentSpeed=0.0
var description:String{
return “Viajanda a (currentSpeed) km/h”
}
func makeNoise(){
print( “El ruido depende del vehiculo”)
}
}

let someVehicle=Vehiculo()
print(someVehicle.description)

// herencia
class Bicyclew:Vehiculo{
var hasBasket=false
override func makeNoise() {
print(“El ruido de este vehiculo es Glin Glin”)
}
}
//herencia de hijo-- y este hereda de su padre
class Tandem:Bicyclew{
var currrentNumberOfPassangers=0
}

let tandem=Tandem()
tandem.hasBasket=true
tandem.currentSpeed=22.0
tandem.currrentNumberOfPassangers=2

print(" (tandem.description) y su cantidad de pasajeros es (tandem.currrentNumberOfPassangers)")

// override metodos padre

class Train:Vehiculo{
var numberOfWagones=0
override func makeNoise() {
print(“Chooooo Chooooooo”)
}
}

let train=Train()
train.makeNoise()

tandem.makeNoise()

Algo curioso es que con la palabra final evitamos que una clase hija sobreescriba variables, metodos etc.
Pero si intentamos asignarle un valor a esa variable final desde la instancia y no desde la definicion de la nueva clase, si se puede sobreescribir.
Ejemplo:

class Vehicle {
    var color: String = ""
    var currentSpeed: Double = 0.0
    final var brand: String = "Renault"
}
var myVehicle = Vehicle()
myVehicle.brand = "Honda" // no da error y asigna correctamente el nuevo valor.
class Tank : gasCar {
    var guns = 2
    override func makeNoise() {
           print("clan Clan")
        }
}

class gasBike : motorCycle {
    var tankCapacity = 5
    override func makeNoise() {
           print("brrr brrrr")
        }
}

class cruise : boat{
    var capacity = 500
    override func makeNoise() {
           print("buuuuu buuuu")
        }
}