"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Programación orientada a objetos (OOP) en Python: clases y objetos explicados

Programación orientada a objetos (OOP) en Python: clases y objetos explicados

Publicado el 2024-11-06
Navegar:601

Object-Oriented Programming (OOP) in Python: Classes and Objects Explained

La programación orientada a objetos (POO) es un enfoque clave utilizado en el desarrollo de software.

En este artículo, exploraremos las ideas principales de la programación orientada a objetos, particularmente analizando las clases, los objetos, la herencia y el polimorfismo en Python.

Al final de esta guía, comprenderá cómo organizar su código Python utilizando principios de programación orientada a objetos, haciendo que sus programas sean más modulares, reutilizables y más fáciles de mantener.


¿Qué es la programación orientada a objetos?

La programación orientada a objetos (POO) organiza el diseño de software en torno a datos u objetos, en lugar de funciones y lógica.

Un objeto es como un contenedor con atributos (datos) y comportamientos (funciones) únicos. La programación orientada a objetos se centra en varios conceptos clave:

Encapsulación
Esto significa agrupar los datos (atributos) y los métodos (funciones) que operan con esos datos en una sola unidad, llamada clase.

También implica restringir el acceso a algunos componentes del objeto, haciéndolo más seguro.

Abstracción
Ésta es la idea de ocultar los complejos detalles de implementación y mostrar sólo las características esenciales del objeto.

Reduce la complejidad y permite al programador centrarse en interacciones de nivel superior.

Herencia
Este es un mecanismo para crear una nueva clase (clase derivada) a partir de una clase existente (clase base).

La nueva clase hereda atributos y métodos de la clase existente.

Polimorfismo
Esta es la capacidad de utilizar una única interfaz para representar diferentes tipos de datos.

Permite que los objetos sean tratados como instancias de su clase principal y permite definir métodos en una clase secundaria que tienen el mismo nombre que un método en la clase principal.


Conceptos básicos de programación orientada a objetos en Python: clases y objetos

En el núcleo de la programación orientada a objetos (POO) en Python se encuentran las clases y los objetos.

Clases
Una clase es como un modelo para crear objetos.

Define un conjunto de propiedades (atributos) y acciones (métodos) que tendrán los objetos.

En Python, creas una clase usando la palabra clave class. Aquí tienes un ejemplo:

class Car:
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year

    def start_engine(self):
        print(f"{self.make} {self.model}'s engine started.")

Objetos
Un objeto es una instancia de una clase.

Una vez que defines una clase, puedes crear múltiples objetos (instancias) a partir de ella.

Cada objeto puede tener sus propios valores únicos para los atributos definidos en la clase.

Así es como se crea y utiliza un objeto:

my_car = Car("Toyota", "Corolla", 2020)
my_car.start_engine()  # Output: Toyota Corolla's engine started.

En este ejemplo, my_car es un objeto de la clase Car.

Tiene sus propios valores para marca, modelo y año, y puedes usar métodos como start_engine.


Herencia en Python

La herencia permite que una clase (la clase secundaria) adopte los atributos y métodos de otra clase (la clase principal).

Esto es fantástico para reutilizar código y establecer una jerarquía entre clases.

Aquí tienes un ejemplo:

class Vehicle:
    def __init__(self, make, model):
        self.make = make
        self.model = model

    def drive(self):
        print("Driving...")


class Car(Vehicle):
    def __init__(self, make, model, year):
        super().__init__(make, model)
        self.year = year

    def start_engine(self):
        print(f"{self.make} {self.model}'s engine started.")


my_car = Car("Honda", "Civic", 2021)
my_car.drive()  # Output: Driving...
my_car.start_engine()  # Output: Honda Civic's engine started.

En este ejemplo, la clase Auto hereda de la clase Vehículo.

Debido a esto, la clase Car puede usar el método de conducción definido en la clase Vehicle.

Método anulado
A veces, una clase hija necesita cambiar o agregar algo al comportamiento de un método que hereda de una clase padre.

Esto se hace anulando el método.

Aquí tienes un ejemplo:

class Vehicle:
    def drive(self):
        print("Driving a vehicle...")


class Car(Vehicle):
    def drive(self):
        print("Driving a car...")


my_vehicle = Vehicle()
my_vehicle.drive()  # Output: Driving a vehicle...

my_car = Car()
my_car.drive()  # Output: Driving a car...

En este ejemplo, el método de conducción de la clase Car anula el método de conducción de la clase Vehículo, lo que permite un comportamiento personalizado.

Herencia múltiple
Python también admite herencia múltiple, donde una clase puede heredar de más de una clase base.

Aquí tienes un ejemplo:

class Vehicle:
    def __init__(self, make, model):
        self.make = make
        self.model = model

    def drive(self):
        print("Driving a vehicle...")


class Electric:
    def charge(self):
        print("Charging...")


class Car(Vehicle):
    def __init__(self, make, model, year):
        super().__init__(make, model)
        self.year = year

    def start_engine(self):
        print(f"{self.make} {self.model}'s engine started.")


class HybridCar(Car, Electric):
    def switch_mode(self):
        print("Switching to electric mode...")


my_hybrid = HybridCar("Toyota", "Prius", 2022)
my_hybrid.start_engine()  # Output: Toyota Prius's engine started.
my_hybrid.drive()  # Output: Driving a vehicle...
my_hybrid.charge()  # Output: Charging...
my_hybrid.switch_mode()  # Output: Switching to electric mode...

En este ejemplo, la clase HybridCar hereda tanto de Car como de Electric, lo que le permite acceder a métodos de ambas clases principales.


Polimorfismo en Python

El polimorfismo es una característica que permite a los métodos realizar diferentes acciones según el objeto con el que están trabajando, incluso si estos métodos tienen el mismo nombre.

Esto es especialmente útil cuando se trata de herencia, ya que le permite usar el mismo nombre de método en diferentes clases de una manera que tenga sentido para cada clase.

Polimorfismo con funciones
Aquí tienes un ejemplo:

class Dog:
    def speak(self):
        return "Woof!"


class Cat:
    def speak(self):
        return "Meow!"


def make_animal_speak(animal):
    print(animal.speak())


dog = Dog()
cat = Cat()

make_animal_speak(dog)  # Output: Woof!
make_animal_speak(cat)  # Output: Meow!

La función make_animal_speak demuestra polimorfismo al aceptar cualquier objeto con un método de habla.

Esto le permite trabajar con objetos Perro y Gato, a pesar de sus diferencias.

Polimorfismo con métodos de clase
El polimorfismo también entra en juego cuando se trabaja con métodos en una jerarquía de clases.

Aquí tienes un ejemplo:

class Animal:
    def speak(self):
        raise NotImplementedError("Subclass must implement abstract method")


class Dog(Animal):
    def speak(self):
        return "Woof!"


class Cat(Animal):
    def speak(self):
        return "Meow!"


animals = [Dog(), Cat()]

for animal in animals:
    print(animal.speak())

En este ejemplo, tanto Perro como Gato son subclases de Animal.

El método hablar se implementa en ambas subclases, lo que permite que el polimorfismo surta efecto al iterar a través de la lista de animales.


Encapsulación y ocultación de datos

La encapsulación es la práctica de combinar datos y los métodos que funcionan con esos datos en una sola unidad, llamada clase.

También implica restringir el acceso a ciertas partes del objeto, lo cual es crucial para proteger los datos en la Programación Orientada a Objetos (POO).

Atributos públicos y privados
En Python, puedes indicar que un atributo es privado comenzando su nombre con un guión bajo.

Si bien esto en realidad no impide el acceso desde fuera de la clase, es una convención que indica que no se debe acceder al atributo directamente.

Aquí tienes un ejemplo:

class Account:
    def __init__(self, owner, balance=0):
        self.owner = owner
        self._balance = balance  # Private attribute

    def deposit(self, amount):
        self._balance  = amount

    def withdraw(self, amount):
        if amount 



En este ejemplo, la clase Cuenta tiene un atributo privado _balance, que se manipula mediante métodos como depósito, retiro y get_balance.

Se desaconseja el acceso directo a _balance desde fuera de la clase.


Conceptos avanzados de programación orientada a objetos

Para aquellos que quieran profundizar su comprensión de la programación orientada a objetos (POO) en Python, aquí hay algunos temas avanzados:

Métodos de clase
Estos son métodos que están conectados a la clase misma, no a instancias individuales de la clase.

Pueden cambiar el estado de la clase, lo que afecta a todas las instancias de la clase.

class Car:
    total_cars = 0

    def __init__(self, make, model):
        self.make = make
        self.model = model
        Car.total_cars  = 1

    @classmethod
    def get_total_cars(cls):
        return cls.total_cars

Métodos estáticos
Estos son métodos que pertenecen a la clase pero no cambian el estado de la clase ni de sus instancias.

Se definen usando el decorador @staticmethod.

class MathOperations:
    @staticmethod
    def add(x, y):
        return x   y

Decoradores de propiedades
Los decoradores de propiedades en Python proporcionan una forma de definir captadores, definidores y eliminadores de atributos de clase de una manera más pitónica.

class Employee:
    def __init__(self, name, salary):
        self._name = name
        self._salary = salary

    @property
    def salary(self):
        return self._salary

    @salary.setter
    def salary(self, value):
        if value 



En este ejemplo, se accede al atributo de salario como un atributo normal, pero se administra mediante métodos getter y setter.


Conclusión

La programación orientada a objetos (POO) en Python es una forma poderosa de organizar y administrar su código.

Al aprender los principios de la programación orientada a objetos, como clases, objetos, herencia, polimorfismo y encapsulación, podrá escribir programas Python que estén bien organizados, sean reutilizables y fáciles de mantener.

Ya sea que estés trabajando en scripts pequeños o en aplicaciones grandes, el uso de los principios de programación orientada a objetos te ayudará a crear un software más eficiente, escalable y robusto.

Declaración de liberación Este artículo se reproduce en: https://dev.to/devasservice/object- Oriented-programming-oop-in-python-classes-and-objects-explained-26ek?1 Si hay alguna infracción, comuníquese con Study_golang@163 .com para eliminarlo
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3