Python es un lenguaje de programación orientado a objetos. Es decir, casi todo en python son objetos con sus métodos y propiedades. Los objetos se forman a partir de clases (plantillas).
En las siguientes líneas aprenderás a crear clases, crear objetos a partir de ellas, la herencia entre clases y otros conceptos relacionados.
Entrada anterior: Funciones en Python
Crear clases y objetos
Creamos una clase en python con la palabra reservada class seguida de un nombre.
Ahora podemos crear todos los objetos que queramos de esa clase. Solamente tenemos que nombrarla con paréntesis al final.
class Person: # Crear la clase Person name = "Jack" surname = "Nicholson" pObject = Person() # Crear un objeto de tipo Person print(f"Mi nombre es {pObject.name} {pObject.surname}") # Mi nombre es Jack Nicholson
La función __init__
Todas las clases en python tienen una función especial llamada __init__ que es ejecutada implícitamente. Su objetivo primordial es inicializar las propiedades de la clase. Esta función es similar al constructor que tienen otros lenguajes de programación.
Pues bien, en este ejemplo se crea un objeto de la clase Persona pero somos nosotros los que le pasamos los valores de las propiedades a la función __init__.
class Person: def __init__(self, name, surname): self.name = name self.surname = surname pObject = Person("Jack", "Nicholson") print(f"Soy {pObject.name} {pObject.surname}") # Soy Jack Nicholson
El parámetro self hace referencia al objeto actual que está siento creado (instanciado). Mediante self accedemos a las variables que pertenecen a la clase.
La función __str__
Otra de las funciones especiales que tienen las clases en Python es __str__. Esta permite imprimir el objeto de una manera más amigable.
Si no implementamos __str__ el resultado al imprimir el objeto sería el siguiente:
pObject = Person("Jack", "Nicholson") print(pObject) # <__main__.Person object at 0x14aa197e0100>
Ahora, si implementamos __str__ podemos retornar cualquier cadena de texto que queramos.
class Person: def __init__(self, name, surname): self.name = name self.surname = surname def __str__(self): return self.name + " " + self.surname pObject = Person("Nicolas", "Cage") print(pObject) # Nicolas Cage
Añadir Métodos
Un método es una función que pertenece a un objeto. En este ejemplo definimos el método is_expensive(), que determina si el precio de un objeto de tipo car es caro o económico.
class Car: def __init__(self, model, price): self.model = model self.price = price def is_expensive(self): return self.price > 30000 c = Car("BMW M3", 50000) print(c.is_expensive()) # True
Modificar un objeto
A la hora de modificar o eliminar las propiedades de un objeto usamos la siguiente sintaxis:
class Car: def __init__(self, model, price): self.model = model self.price = price c = Car("BMW M3", 50000) c.price = 20000 print(c.price) # 20000 del c.price c.price # 'Car' object has no attribute 'price'
Herencia en Python
En la programación orientada a objetos una clase puede heredar todas las propiedades y métodos de otra clase. Una se llama clase hija (o clase derivada), y la otra clase padre (o clase base).
Clase padre
Cualquier clase puede ser una clase padre en python.
Clase hija
Una clase hija hereda de una clase padre mediante la siguiente sintaxis:
claseHija(clasePadre):
En el siguiente ejemplo la clase hija Dog hereda la funcionalidad de la clase padre Animal. Por lo tanto, Dog tiene acceso al método sound() de la clase padre.
# Parent class class Animal: def __init__(self, name, noise): self.name = name self.noise = noise def sound(self): print(f"{self.noise}") # Child class class Dog(Animal): def __init__(self, name, noise, color): super().__init__(name, noise) # Call the parent class self.color = color def describe(self): print(f"{self.name} is {self.color}") dog = Dog("Moon", "!Guau, Guau, Guau¡", "gray") dog.sound() # !Guau, Guau, Guau¡
La palabra reservada super() es necesaria para llamar a la función __init__ de la clase padre y así heredar sus métodos y propiedades.
0 comentarios