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

Deja una respuesta

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies