Esta es una respuesta completamente subjetiva. La mejor respuesta es, probablemente, “Lo que sea que te ayude a resolver tu problema” . Si solo estás aprendiendo por aprender, hay muchas opciones. Supongo que lo que realmente preguntas es “acabo de aprender a hacer una clase en Python; ¿ahora qué?”, No “aprendí a hacer y usar clases, ¿cuál es el siguiente tema (diferente) para manejar?” Por lo tanto, hablemos un poco sobre lo que puedes hacer con las clases ahora que puedes hacer una. Empecemos con un ejemplo:
casa de clase:
def __init __ (auto, dirección, pies cuadrados, dormitorios, baños):
autodirección = dirección
self.sq_feet = sq_feet
self.bedrooms = dormitorios
baños propios = baños
self.is_ac_on = Falso
def turn_on_ac (self):
imprimir (“La CA está funcionando”)
self.is_ac_on = Verdadero
- Cómo aprender todo sobre deportes y desarrollar interés por un deporte en particular.
- ¿Qué tan difícil es aprender Nvivo?
- ¿Cómo aprenderías trucos avanzados de defensa personal en horas?
- ¿Cuánto tiempo le tomaría a un principiante en programación aprender a construir una versión simplificada de Twitch?
- ¿Cuál es el mejor orden para aprender idiomas?
def turn_off_ac (self):
imprimir (“La CA está apagada”)
self.is_ac_on = Falso
Por supuesto que ahora puedo hacer Casas:
myhouse = House (‘123 Main St’, 1350, 3, 2)
casa de ensueño = House (‘456 Breezy Lane’, 4300, 6, 6)
…
Supongo que estás en este punto. ¿Ahora que? Varias cosas.
Puedes usar la herencia para construir clases especializadas.
Digamos que yo era arquitecto y quería construir un conjunto de viviendas en un nuevo vecindario y todas tenían 3 dormitorios y 3 baños, pero la dirección y los pies cuadrados variaban. Podría hacer Casas individualmente con solo nuestra clase de Casa:
casa1 = Casa (‘1 Oak St’, 1600, 3, 3)
casa2 = Casa (‘2 Oak St’, 1475, 3, 3)
…
En lugar de repetir todo, puedo “heredar” todo sobre House, pero establecer ciertos atributos estáticos en un lugar en lugar de cada vez que construyo uno.
clase RiverValleyHouse (Casa):
def __init __ (self, address, sq_feet)
super () .__ init __ (self, address, sq_feet, 3, 3)
En este punto, cada vez que creo una casa en River Valley, todos tendrán automáticamente los mismos dormitorios y baños (3). Con la llamada super()
(es decir, el método de init
la House
), he reutilizado mi código existente para hacer todo el trabajo de hacer una casa ; Acabo de especializar la parte sobre la cama y los baños. Aunque este es un caso trivial, este es un gran avance. Además, puedo agregar otras opciones a mi casa especializada. Digamos que todas las casas de River Valley tienen la opción de una piscina, pero no es obligatorio.
clase RiverValleyHouse (Casa):
def __init __ (self, address, sq_feet, has_pool):
super () .__ init __ (self, address, sq_feet, 3, 3)
self.has_pool = has_pool
En este punto, ahora he agregado a la especialización de la casa de River Valley, a la vez que conservo todos los demás atributos de la clase House, sin tener que cambiar nada acerca de House.
Puede sobrecargar los métodos.
En nuestra clase de Casa, podemos encender y apagar el A / C. Genial. Pero en las casas de River Valley, el A / C solo se apagará si la temperatura es inferior a 85. Ahora necesitamos saber la temperatura al intentar apagar el A / C. Para lograr esto, tenemos que cambiar lo que sucede en la llamada turn_off_ac()
. Este comportamiento es diferente al llamado de la casa. Le damos el mismo nombre (porque está haciendo lo mismo), pero cambiamos cómo se hace. Esto es una sobrecarga.
clase RiverValleyHouse (Casa):
def __init __ (self, address, sq_feet, has_pool):
super () .__ init __ (self, address, sq_feet, 3, 3)
self.has_pool = has_pool
def turn_off_ac (self, temp):
si temp> = 85:
imprimir (“Lo siento, todavía hace calor aquí”)
más:
super (). turn_off_ac (self)
Ahora nuestra casa de River Valley se comporta de manera diferente a una casa normal.
rivvalhouse = RiverValleyHouse (’14 Hickory ‘, 1666, Falso)
rivvalhouse.turn_on_ac ()
# imprime “La CA ya está funcionando”
rivvalhouse.turn_off_ac (temp = 88)
# impresiones “Lo siento, todavía hace calor aquí”
rivvalhouse.turn_off_ac (temp = 78)
# imprime “La CA está apagada”
myhouse = House (‘123 Main’, 1250, 3, 2)
myhouse.turn_ac_on ()
# imprime “La CA ya está funcionando
myhouse.turn_ac_off ()
# siempre imprime “La CA está apagada”
Algunas cosas son dignas de mención aquí. Uno, cambié la forma en que funciona el método turn_off_ac()
aunque tenga el mismo nombre. Dos, el método normal de la Casa no ha cambiado. Todavía funciona de la misma manera a pesar de que la casa de River Valley es diferente. Por último, he conservado el comportamiento de la llamada turn_ac_on()
. No tuve que escribir nada para obtener ese comportamiento; solo vino con eso Técnicamente, sobrecargué la función init antes con el parámetro pool, pero eso era para mostrar un punto diferente.
Ahora puedes usar la contención.
Digamos que necesito gestionar el barrio. Podemos hacer una clase de barrio que contiene las casas dentro de él.
barrio de clase:
def __init __ (auto, casas):
casas propias = casas
Ahora puedo acceder a las clases desde otras clases.
myhouse = House (‘1 Maple Dr’, 1420, 2, 2)
otra casa = Casa (’14 Maple Dr ‘, 1500, 3, 2)
houses_in_the_hood = [myhouse, otherhouse]
thehood = Barrio (houses_in_the_hood)
thehood.houses [0] .turn_on_ac ()
thehood.houses [1] .turn_off_ac ()
…
Hay muchos ejemplos de la vida real en los que es probable que esto RaceCar
( RaceCar
hereda de Car
, que contiene un Engine
, etc.). Sin embargo, hay una regla general a seguir cuando se hereda y contiene:
Si la relación está definida por una relación “es una”, debe heredarse, pero si la relación se define por “tiene una”, debe estar contenida.
Para dar más detalles sobre el ejemplo del auto, un RaceCar
es definitivamente un Car
, por lo tanto, heredará esas cosas sobre un auto (volante, pedales, ruedas, etc.). Sin embargo, un automóvil “no es” un motor, pero sí “tiene un” motor, por lo tanto, debe estar contenido. (por ejemplo, car.engine.rev()
)
Como ejemplo, podría intentar crear una cadena de supermercados, cada uno con un gerente y varios empleados. Podría hacer que los gerentes interactúen con los empleados, transferir a los empleados de una tienda a otra, hacer que los empleados hagan cosas en la tienda, etc. Tal ejercicio demostraría los principios anteriores.