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 más 2 puntos.
Ahora podemos crear todos los objetos que queramos de esa clase. Solamente tenemos que nombrarla con paréntesis al final del nombre.
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.
En este ejemplo creamos un objeto de la clase Persona pero somos nosotros los que 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