Fundamentos de Programaci贸n y Python

1

驴Por qu茅 aprender Python?

2

Introducci贸n a Python

3

Conceptos B谩sicos de Programaci贸n

4

Pr谩ctica: Te doy la bienvenida a los ejercicios interactivos

5

Manipulaci贸n de Cadenas de Texto en Python

6

Enteros, Flotantes y Booleanos

7

Todo lo que Debes Saber sobre print en Python

8

Operaciones Matem谩ticas en Python

9

Operaciones de Entrada/Salida en Consola

Colecci贸n y Procesamiento de Datos en Python

10

Listas

11

M茅todo slice

12

Listas de m谩s dimensiones y Tuplas

13

Aplicaci贸n de Matrices

14

Diccionarios

15

Comprehension Lists en Python (CLASE NUEVA)

Control de Flujo en Python

16

Estructuras condicionales

17

Bucles y Control de Iteraciones

18

Generadores e Iteradores

Funciones y Manejo de Excepciones en Python

19

Uso de Funciones en Python

20

Funciones Lambda y Programaci贸n Funcional en Python

21

驴C贸mo realizar una funci贸n recursiva en Python?

22

Manejo de Excepciones y Uso de Pass (CLASE NUEVA)

Programaci贸n Orientada a Objetos en Python

23

Fundamentos de Programaci贸n Orientada a Objetos en Python

24

Ejercicio Biblioteca con POO

25

Herencia en POO con Python

26

Objetos heredados

27

Los 4 pilares de la programacion orientada a objetos

28

Uso de super() en Python (CLASE NUEVA)

29

Superando los Fundamentos de Programaci贸n Orientada a Objetos en Python

Lectura y escritura de archivos

30

Manejo de Archivos .TXT (CLASE NUEVA)

31

Manejo de Archivos CSV (CLASE NUEVA)

32

Manejo de Archivos JSON (CLASE NUEVA)

Biblioteca est谩ndar de Python

33

Biblioteca est谩ndar en Python (CLASE NUEVA)

34

Librer铆a Os, Math y Random (CLASE NUEVA)

35

Librer铆a Statistics y An谩lisis Estad铆stico (CLASE NUEVA)

36

Proyecto final: Guerra naval

Conceptos avanzados de Python

37

Recapitulaci贸n de lo aprendido hasta ahora

38

Escribir c贸digo Pythonico y profesional

39

Comentarios y Docstrings en Python

40

Scope y closures: variables locales y globales

41

Anotaciones de tipo

42

Validaci贸n de tipos en m茅todos

43

Librer铆a Collections y Enumeraciones

Decoradores

44

Decoradores en Python

45

Decoradores anidados y con par谩metros

46

Uso de Decoradores en clases y m茅todos

M茅todos y estructura de clases en Python

47

M茅todos m谩gicos

48

Sobrecarga de operadores

49

Implementaci贸n de `if __name__ == "__main__":`

50

Metaprogramaci贸n en Python

51

Uso de *args y **kwargs

52

M茅todos privados y protegidos

53

Gesti贸n avanzada de propiedades

54

M茅todos est谩ticos y de clase avanzados

Programaci贸n concurrente y as铆ncrona

55

Introducci贸n a la concurrencia y paralelismo

56

Threading y multiprocessing en Python

57

Asincronismo con asyncio

58

Asincronismo y concurrencia

Creaci贸n de m贸dulos y paquetes

59

Creaci贸n de m贸dulos en Python

60

Gesti贸n de paquetes

61

Publicaci贸n de paquetes en PyPI

Proyecto final

62

Implementaci贸n de un sistema completo

63

Implementaci贸n de un Sistema Completo

No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de qui茅n quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscr铆bete

Termina en:

14 D铆as
4 Hrs
4 Min
23 Seg
Curso de Python

Curso de Python

Carli Code

Carli Code

Uso de super() en Python (CLASE NUEVA)

28/63
Recursos

驴Qu茅 es la funci贸n super() y c贸mo se usa en Python?

La funci贸n super() en Python es una herramienta clave para trabajar con la herencia en programaci贸n orientada a objetos. Permite a las subclases acceder y extender los m茅todos y atributos de su superclase sin referenciarlos expl铆citamente. Esto es muy 煤til en estructuras de herencia complejas, ya que facilita el mantenimiento y la extensi贸n del c贸digo. En esta explicaci贸n, descubrir谩s c贸mo funciona super() en el contexto de clases de Python y su importancia en la programaci贸n orientada a objetos.

驴C贸mo se inicializan los atributos en clases con super()?

En el mundo de la programaci贸n orientada a objetos, es fundamental definir atributos y m茅todos de una clase. Los atributos representan las caracter铆sticas de la clase, mientras que los m茅todos definen las acciones que puede realizar. Al construir una clase, el constructor se utiliza para inicializar los atributos.

En Python, una subclase puede heredar atributos y m茅todos de una superclase utilizando la funci贸n super(). Por ejemplo, consideremos una clase Person con atributos como name y age inicializados en su constructor:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def greet(self):
        print(f"Hello! I am a person.")

Cuando se crea una subclase Student que hereda de Person, se puede utilizar super() para acceder al constructor de Person y extenderlo, a帽adiendo atributos propios como student_id:

class Student(Persona):
    def __init__(self, name, age, student_id):
        super().__init__(name, age)
        self.student_id = student_id

    def greet(self):
        super().saludar()
        print(f"Hello, my student ID is {self.student_id}.")

驴C贸mo funciona el m茅todo super() en la herencia m煤ltiple?

La utilidad de super() se extiende a m谩s de un nivel de herencia. Imaginemos una situaci贸n en la que tenemos una clase LivingBeing, de la que hereda Person, y a su vez, de la cual hereda Student. Aqu铆, super() se utiliza para mantener la cadena de inicializaciones:

class LivingBeing:
聽 聽 def __init__(self, name):
聽 聽 聽 聽 self.name = name
class Person(LivingBeing):
聽 聽 def __init__(self, name, age):
聽 聽 聽 聽 super().__init__(name)
聽 聽 聽 聽 self.age = age
class Student(Person):
聽 聽 def __init__(self, name, age, student_id):
聽 聽 聽 聽 super().__init__(name, age)
聽 聽 聽 聽 self.student_id = student_id

Con este esquema, super() asegura que todos los niveles de herencia reciban los atributos iniciales adecuados, facilitando una estructura limpia y coherente.

驴Por qu茅 es importante la herencia en la programaci贸n orientada a objetos?

La herencia es uno de los cuatro pilares fundamentales de la programaci贸n orientada a objetos. Permite reutilizar y extender el c贸digo de manera eficiente, lo cual es crucial en la creaci贸n de aplicaciones complejas.

Al comprender y aplicar la funci贸n super() en Python, los desarrolladores pueden construir sistemas jer谩rquicos con niveles de abstracci贸n y especializaci贸n, promoviendo el dise帽o de software robusto y mantenible.

Recuerda que la pr谩ctica constante y el estudio son esenciales para profundizar en estos conceptos y convertirte en un experto en programaci贸n orientada a objetos en Python. Contin煤a explorando y experimentando con clases y herencia para consolidar tu conocimiento.

Aportes 15

Preguntas 2

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

馃煝 **Diferencia entre el atributo y el argumento del constructor** Te habr谩s fijado que `name` y self.name parecen ser lo mismo, pues no, son diferentes aunque contengan el mismo valor. La sentencia `self.name` hace referencia al atributo del objeto, mientras que `name` hace referencia al valor del argumento de `__init__` cuando se crea una instancia. Por ejemplo, voy a repetir el c贸digo pero con variables diferentes: ```python class Person: def __init__(self, nombre, edad): self.name = nombre self.age = edad instancia = Person("Andres", 25) instancia.name # "Andres" instancia.age # 25 ``` Espero que te haya servido. 隆Nunca pares de aprender! 馃殌
El uso de `super()` en Python est谩 relacionado con la herencia de clases. Permite llamar m茅todos o acceder a atributos de la \*\*clase padre\*\* desde una \*\*clase hija\*\*, sin necesidad de referenciar expl铆citamente el nombre de la clase padre. Es especialmente 煤til cuando se trabaja con herencia m煤ltiple o se desea extender la funcionalidad de la clase base sin sobrescribir completamente su comportamiento. \### Sintaxis b谩sica de `super()` ```python super().metodo\_de\_la\_clase\_padre() ``` Aqu铆, `super()` devuelve un objeto que representa a la clase base, permitiendo llamar a sus m茅todos o acceder a sus atributos. \### Ejemplo b谩sico con herencia y `super()` ```python class Animal: def \_\_init\_\_(self, nombre): self.nombre = nombre def hacer\_sonido(self): print("El animal hace un sonido") class Perro(Animal): def \_\_init\_\_(self, nombre, raza): \# Llamamos al constructor de la clase padre con super() super().\_\_init\_\_(nombre) self.raza = raza def hacer\_sonido(self): \# Extendemos la funcionalidad del m茅todo de la clase padre super().hacer\_sonido() print("El perro ladra") \# Uso de las clases mi\_perro = Perro("Firulais", "Golden Retriever") print(mi\_perro.nombre) # Firulais mi\_perro.hacer\_sonido() ``` \#### Salida: ``` El animal hace un sonido El perro ladra ``` \### Explicaci贸n: 1\. \*\*`super().\_\_init\_\_(nombre)`\*\*: Llama al constructor de la clase base `Animal`, lo que permite que la clase hija `Perro` tambi茅n inicialice la variable `nombre` que est谩 definida en la clase `Animal`. 2\. \*\*`super().hacer\_sonido()`\*\*: Llama al m茅todo `hacer\_sonido` de la clase base `Animal` antes de agregar el comportamiento espec铆fico de `Perro`. \### Beneficios de usar `super()`: 1\. \*\*Herencia M煤ltiple\*\*: En casos donde una clase hereda de m煤ltiples clases, `super()` sigue el \*\*orden de resoluci贸n de m茅todos (MRO)\*\*, lo que garantiza que se llame al m茅todo correcto en la cadena de herencia. 2\. \*\*Reutilizaci贸n\*\*: Permite reutilizar el c贸digo de la clase base, extendiendo su funcionalidad sin necesidad de duplicar c贸digo. 3\. \*\*Mantenibilidad\*\*: Si el nombre de la clase base cambia, no es necesario modificar los m茅todos que usan `super()`, ya que no se hace referencia directa a la clase padre. \### Ejemplo con Herencia M煤ltiple ```python class Mamifero: def \_\_init\_\_(self, nombre): self.nombre = nombre def hacer\_sonido(self): print("Sonido de mam铆fero") class Volador: def \_\_init\_\_(self, velocidad): self.velocidad = velocidad def volar(self): print(f"El animal vuela a {self.velocidad} km/h") class Murcielago(Mamifero, Volador): def \_\_init\_\_(self, nombre, velocidad): super().\_\_init\_\_(nombre) # Llama al constructor de Mamifero Volador.\_\_init\_\_(self, velocidad) # Llama al constructor de Volador \# Uso de las clases bat = Murcielago("Batty", 50) bat.hacer\_sonido() # Sonido de mam铆fero bat.volar() # El animal vuela a 50 km/h ``` En este ejemplo, `Murcielago` hereda de ambas clases, `Mamifero` y `Volador`. `super()` es 煤til para llamar al constructor de `Mamifero`, pero tambi茅n es necesario llamar expl铆citamente al constructor de `Volador` para inicializar `velocidad`. \### Resumen: \- `super()` es una herramienta poderosa para interactuar con clases base. \- Facilita la herencia en programas orientados a objetos, permitiendo la reutilizaci贸n y extensi贸n del comportamiento de las clases padres. \- Es crucial en escenarios de herencia m煤ltiple para seguir el orden correcto de llamadas a m茅todos.
```python #ahora LivingBegin sera nuestra super clase class LivingBeing: def __init__(self, name): self.name = name class Person(LivingBeing): def __init__(self, name, age): super().__init__(name) self.age = age class Student(Person): def __init__(self, name, age, student_id): super().__init__(name, age) self.student_id = student_id def introduce(self): print(f"Hi, I am {self.name}, I have {self.age} years old, and my student ID is {self.student_id}") student = Student("Ana", 20, "S123") student.introduce() # Hi, I am Ana, I have 20 years old, and my student ID is S123 ```
En Python, `super()` es una funci贸n que te permite acceder a m茅todos o atributos de una clase padre desde una clase hija. Es especialmente 煤til en el contexto de la herencia para garantizar que las clases derivadas llamen a los m茅todos de sus clases base correctamente, evitando sobreescrituras accidentales. ```python class Animal: def __init__(self, name): self.name = name def speak(self): return f"{self.name} hace un sonido." class Perro(Animal): def __init__(self, name, breed): # Llama al constructor de la clase padre (Animal) super().__init__(name) self.breed = breed def speak(self): # Llama al m茅todo speak de la clase padre y lo extiende return super().speak() + " 隆Guau!" # Crear un objeto de la clase Perro mi_perro = Perro("Max", "Labrador") print(mi_perro.speak()) # Output: Max hace un sonido. 隆Guau! ```
Estoy trabajando a la par con ChatGPT para entender el curos de Python, asi que le pedi que me ayude con este c贸digo que explica Clases, Subclases, etc. Espero que les sea de ayuda. ```js # **Clase Base** class Platillo: # Definici贸n de la clase # **Constructor** def __init__(self, nombre, precio): # M茅todo especial para inicializar atributos self.nombre = nombre # Atributo de instancia self.precio = precio # Atributo de instancia # **M茅todo P煤blico** def mostrar_detalles(self): # M茅todo que se puede acceder desde fuera de la clase return f"{self.nombre}: ${self.precio}" # **M茅todo Abstracto** def preparar(self): # M茅todo que debe ser implementado por las subclases raise NotImplementedError("Este m茅todo debe implementarse en cada platillo.") # **Subclase** class Pizza(Platillo): # Pizza hereda de Platillo (Relaci贸n de Herencia) # **Sobrescritura de M茅todo** def preparar(self): # Sobrescribe el m茅todo preparar de la clase base return f"Preparando la pizza {self.nombre} (amasar, hornear, agregar ingredientes)." # **Subclase** class Sopa(Platillo): # Sopa hereda de Platillo # **Sobrescritura de M茅todo** def preparar(self): # Sobrescribe el m茅todo preparar de la clase base return f"Preparando la sopa {self.nombre} (hervir agua, agregar ingredientes)." # **Instanciaci贸n de Objetos** pizza = Pizza("Margarita", 8) # Crear un objeto de la clase Pizza sopa = Sopa("Minestrone", 6) # Crear un objeto de la clase Sopa # **Uso de M茅todos** print(pizza.mostrar_detalles()) # Llama al m茅todo p煤blico de la clase base print(sopa.preparar()) # Llama al m茅todo sobrescrito en la subclase ```
me gustaria profundizar en un error que cometi. se como arreglarlo pero quisiera saber la naturaleza del mensaje de error que me salio: mi error fue escribir la linea: super.**init**(name) entiendo que asi estaria accediendo al constructor del metodo super o que pasa ahi ? porque el error que me salio fue :TypeError: descriptor '\_\_init\_\_' requires a 'super' object but received a 'str'
la curiosidad de ver que habia metodos que iniciaban con \_\_ y que los atributosa tambien investigue y me encontre con algo llamado name manling. esta convencion de iniciar el combre de metodos y atributos con \_\_ indica internamente que el metodo o atributo es privado y no debe ser accedido fuera de la clasae, entonces empieza el namemanlign que cambia el nombre del atributo o metodo internamente a algo con la siguiente forma *clase*\_metodo *clase*\_atributo la idea de hacer esto es : 1. Claridad: Facilita la comprensi贸n de qu茅 m茅todos y atributos son internos a la clase y no deben ser utilizados externamente. 2\. Seguridad: Desalienta el acceso directo a los atributos y m茅todos internos, aunque no lo impide completamente. 3\. Organizaci贸n: Ayuda a mantener el c贸digo m谩s organizado y modular.
Wow esta clase la entend铆 super claro jajajaj alucinante :D
Espero que el uso que le di a la clase este bien, perd贸n mi ingles es cavern铆cola. ```js # super() es utilizado para heredar las caracteristicas de un metodo de la clase padre class Car: def __init__(self, color, brand): self.color = color self.brand = brand def accelerate(self): print(f"Hi, my car is {self.color} and her sound is rrun run") class Lambo(Car): def __init__(self, color, brand, price): super().__init__(color, brand) self.price = price def accelerate(self): super().accelerate() print(f"and her brand is {self.brand}, the price of this car is {self.price}") lambo = Lambo("blue", "Lamborghini", 1500000) lambo.accelerate() ```# super() es utilizado para heredar las caracteristicas de un metodo de la clase padre class Car:聽 聽 def \_\_init\_\_(self, color, brand):聽 聽 聽 聽 self.color = color聽 聽 聽 聽 self.brand = brand 聽 聽 def accelerate(self):聽 聽 聽 聽 print(f"Hi, my car is {self.color} and her sound is rrun run") class Lambo(Car):聽 聽 def \_\_init\_\_(self, color, brand, price):聽 聽 聽 聽 super().\_\_init\_\_(color, brand)聽 聽 聽 聽 self.price = price 聽 聽 def accelerate(self):聽 聽 聽 聽 super().accelerate()聽 聽 聽 聽 print(f"and her brand is {self.brand}, the price of this car is {self.price}")聽 聽 lambo = Lambo("blue", "Lamborghini", 1500000)lambo.accelerate()
Una aplicaci贸n real de `__repr__` en Python es en la creaci贸n de clases para representar objetos de forma legible. Por ejemplo, en el desarrollo de aplicaciones de gesti贸n de productos, puedes definir una clase `Producto` que utilice `__repr__` para proporcionar una representaci贸n clara de cada producto: ```python class Producto: def __init__(self, nombre, precio): self.nombre = nombre self.precio = precio def __repr__(self): return f"Producto(nombre='{self.nombre}', precio={self.precio})" producto = Producto("Laptop", 1200) print(repr(producto)) # Salida: Producto(nombre='Laptop', precio=1200) ``` Esto ayuda a los desarrolladores a entender r谩pidamente las instancias de la clase al imprimirlas o depurarlas.
Tienes raz贸n en la diferencia entre `__str__` y `__repr__` en Python. - `__str__`: Su prop贸sito es devolver una representaci贸n amigable de la instancia de la clase, generalmente para que sea comprensible para los usuarios. Suele enfocarse en proporcionar informaci贸n 煤til en un formato legible. - `__repr__`: Su objetivo es devolver una representaci贸n m谩s formal y precisa de la instancia, 煤til para la depuraci贸n. Incluye informaci贸n detallada sobre la clase y sus atributos, permitiendo que se pueda reconstruir el objeto usando la cadena resultante. Ambos m茅todos son importantes para el manejo de la presentaci贸n de objetos en Python y te ayudar谩n a mejorar la claridad y el mantenimiento de tu c贸digo.
Le hice una peque帽a adicion: class LivingBeing: def \_\_init\_\_(self, name, time\_live): self.name = name self.time\_life = time\_live class Person(LivingBeing): def \_\_init\_\_(self, name, age): super().\_\_init\_\_(name, age) # Here, age is used as time\_live self.age = age def ages\_life(self): print(f"El tiempo de vida de {self.name} es {self.time\_life} a帽os.") class Student(Person): def \_\_init\_\_(self, name, age, student\_id): super().\_\_init\_\_(name, age) self.student\_id = student\_id def introduce(self): print(f"Hi, I'm {self.name}, {self.age} years old, and my student ID is {self.student\_id}") \# creamos instancia student student1 = Student("Carlos", 23, "b3409") student1.introduce() \# Objeto 2 como Persona student2 = Person("Diana", 19) student2.ages\_life() \# creamos un instancia de person ricardo = Person("Roberto", 70) ricardo.ages\_life()
El uso de super permite a帽adir funciones a los m茅todos de la clase padre sin sobreescribirlos totalmente, se puede declarar el mismo m茅todo y acceder a las funcionalidades de la clase padre agregando nuevas, si yo simplemente vuelvo a declarar el m茅todo sin llamar a super() el comportamiento de este en la clase hija sobreescribir铆a el comportamiento original, sin usar super() al crear el constructor en la clase hija sobreescribir铆amos los atributos de la clase padre y por tanto en cambio de accederlos tendr铆amos que volver a declararlos y asignarles valor
El uso de super() en Python es una herramienta muy 煤til cuando trabajas con herencia en Programaci贸n Orientada a Objetos. Permite acceder a m茅todos o atributos de una clase padre desde una clase hija. en resumen el uso de super: * Llama a los m茅todos o inicializadores de la clase padre dentro de una clase hija. * Facilita la reutilizaci贸n de c贸digo al no tener que duplicar l贸gica de la clase padre. * Hace m谩s f谩cil mantener el c贸digo, ya que cualquier cambio en la clase padre se aplicar谩 autom谩ticamente a todas las clases hijas que lo usan.
Muy buenas clases con la profe Carla!