Compartir tecnología

Explore la programación [orientada a objetos de Python]: explicación detallada de los paradigmas de programación avanzados en la nueva era

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Tabla de contenido

1. Conceptos de programación orientada a objetos (POO)

1.1 ¿Qué son clases y objetos?

1.2 Definición de clase

1.3 Relación entre clases y objetos

1.4 La comprensión de Xiao Li

2. Abstracción

2.1 Conceptos abstractos

2.2 Clases y métodos abstractos

2.3 La comprensión de Xiao Li

3. Clases e instancias

3.1 Definición de clase e instanciación

3.2 Atributos y métodos de clase

3.3 La comprensión de Xiao Li

4. Encapsulación/Interfaz

4.1 Concepto de encapsulación

4.2 Concepto de interfaz

4.3 La comprensión de Xiao Li

5. Herencia

5.1 El concepto de herencia

5.2 Método de reescritura

5.3 La comprensión de Xiao Li

6. Polimorfismo

6.1 El concepto de polimorfismo

6.2 Implementar polimorfismo

6.3 La comprensión de Xiao Li

7. Introspección/Reflexión

7.1 El concepto de introspección

7.2 Uso de la introspección para operaciones dinámicas

7.3 La comprensión de Xiao Li

8. Métodos estáticos y métodos de clase.

8.1 Métodos estáticos

8.2 Métodos de clase

Resumir


 

Columna: notas de estudio de Python

Volumen anterior: Modularización de Python y gestión de paquetes

1. Conceptos de programación orientada a objetos (POO)

Programación orientada a objetos (POO) Es un paradigma de programación implementado organizando programas en colecciones de objetos. Los objetos contienen no sólo datos sino también métodos para manipularlos. Los conceptos centrales de la programación orientada a objetos incluyen clases, objetos, propiedades y métodos.

1.1 ¿Qué son clases y objetos?

  • Clase Es una plantilla o plano que se utiliza para crear objetos. Las clases definen las propiedades y el comportamiento de los objetos.
  • Objeto Es una instancia de la clase. Crear un objeto es crear una instancia específica basada en la clase.

ejemplo:

  1. class Dog:
  2. # 类的初始化方法
  3. def __init__(self, name, age):
  4. self.name = name # 属性
  5. self.age = age # 属性
  6. # 方法
  7. def bark(self):
  8. return f"{self.name} says Woof!"
  9. # 创建对象
  10. my_dog = Dog("Rex", 5)
  11. print(my_dog.bark())

1.2 Definición de clase

En Python, las clases pasan. class Definición de palabras clave. Las funciones de una clase se llaman métodos y las variables se llaman propiedades.Los métodos de clase generalmente comienzan conself Como primer parámetro, representa la instancia misma.

ejemplo:

  1. class Cat:
  2. def __init__(self, name):
  3. self.name = name
  4. def meow(self):
  5. return f"{self.name} says Meow!"
  6. # 创建对象
  7. my_cat = Cat("Whiskers")
  8. print(my_cat.meow())

1.3 Relación entre clases y objetos

Una clase es una plantilla para un objeto y define la estructura y el comportamiento del objeto. Los objetos son instancias de clases y cada objeto tiene propiedades y métodos independientes.

  1. class Person:
  2. def __init__(self, name, age):
  3. self.name = name
  4. self.age = age
  5. def greet(self):
  6. return f"Hello, my name is {self.name} and I am {self.age} years old."
  7. # 创建多个对象
  8. person1 = Person("Alice", 30)
  9. person2 = Person("Bob", 25)
  10. print(person1.greet())
  11. print(person2.greet())

1.4 La comprensión de Xiao Li

Una clase es como un molde para galletas, define la forma y el tamaño de la galleta. Los objetos son como galletas de hormigón hechas a partir de un molde. Cada galleta puede tener diferentes sabores (propiedades), pero su forma y tamaño (estructura y comportamiento) son los mismos.

2. Abstracción

abstracto Se refiere a la simplificación de problemas complejos del mundo real aprovechando las características principales e ignorando los detalles. En programación, la abstracción nos ayuda a crear código más conciso y fácil de mantener.

2.1 Conceptos abstractos

La abstracción consiste en extraer las características principales de un objeto ignorando detalles sin importancia. A través de la abstracción, podemos centrarnos en la funcionalidad principal de un objeto sin distraernos con características secundarias.

ejemplo:

  1. class Animal:
  2. def __init__(self, name):
  3. self.name = name
  4. def make_sound(self):
  5. pass # 抽象方法,不具体实现
  6. class Dog(Animal):
  7. def make_sound(self):
  8. return "Woof!"
  9. class Cat(Animal):
  10. def make_sound(self):
  11. return "Meow!"
  12. # 创建对象
  13. dog = Dog("Rex")
  14. cat = Cat("Whiskers")
  15. print(dog.make_sound())
  16. print(cat.make_sound())

2.2 Clases y métodos abstractos

En Python, podemos lograr la abstracción definiendo clases abstractas y métodos abstractos. Las clases abstractas no se pueden crear instancias, solo se pueden heredar. Los métodos abstractos se definen en la clase abstracta pero se implementan en subclases.

ejemplo:

  1. from abc import ABC, abstractmethod
  2. class Vehicle(ABC):
  3. @abstractmethod
  4. def start_engine(self):
  5. pass
  6. class Car(Vehicle):
  7. def start_engine(self):
  8. return "Car engine started"
  9. class Motorcycle(Vehicle):
  10. def start_engine(self):
  11. return "Motorcycle engine started"
  12. # 创建对象
  13. car = Car()
  14. motorcycle = Motorcycle()
  15. print(car.start_engine())
  16. print(motorcycle.start_engine())

2.3 La comprensión de Xiao Li

La abstracción es como reducir una pintura compleja a formas geométricas. Por ejemplo, un gato específico tiene muchas características (color de pelaje, tamaño, edad, etc.), pero solo nos centramos en la característica del maullido. Esta es la abstracción del gato.

3. Clases e instancias

Clases e instancias Es la base de la programación orientada a objetos. Las clases son plantillas y las instancias son objetos concretos. Las instancias se crean a partir de una clase y tienen las propiedades y métodos definidos por la clase.

3.1 Definición de clase e instanciación

Definir una clase y crear una instancia son las operaciones básicas de la programación orientada a objetos. Las clases definen propiedades y métodos, y las instancias son objetos concretos de la clase.

ejemplo:

  1. class Student:
  2. def __init__(self, name, grade):
  3. self.name = name
  4. self.grade = grade
  5. def introduce(self):
  6. return f"Hi, I am {self.name} and I am in grade {self.grade}."
  7. # 创建实例
  8. student1 = Student("Alice", 10)
  9. student2 = Student("Bob", 12)
  10. print(student1.introduce())
  11. print(student2.introduce())

3.2 Atributos y métodos de clase

Los atributos de una clase son el estado del objeto y los métodos son el comportamiento del objeto.Pase de atributos de clase__init__ Inicialización del método, el método se define en la clase.

ejemplo:

  1. class Book:
  2. def __init__(self, title, author):
  3. self.title = title
  4. self.author = author
  5. def get_info(self):
  6. return f"'{self.title}' by {self.author}"
  7. # 创建实例
  8. book = Book("1984", "George Orwell")
  9. print(book.get_info())

3.3 La comprensión de Xiao Li

Las clases e instancias son como un dibujo de una casa y una casa real. Los dibujos (clases) definen la estructura y funcionalidad de la casa, mientras que la casa real (instancia) es el objeto concreto construido según los dibujos.

4. Encapsulación/Interfaz

encapsulación Oculta el estado (propiedades) y el comportamiento (métodos) del objeto dentro de la clase e interactúa con el mundo exterior a través de la interfaz (métodos). La encapsulación mejora la seguridad y el mantenimiento del código.

4.1 Concepto de encapsulación

La encapsulación es uno de los conceptos centrales de la programación orientada a objetos. Protege los datos del objeto ocultando el estado interno del objeto y exponiendo solo las interfaces necesarias. De esta manera, el código externo no puede acceder ni modificar directamente el estado interno del objeto y solo puede manipular datos a través de los métodos proporcionados por el objeto.

ejemplo:

  1. class Account:
  2. def __init__(self, owner, balance=0):
  3. self.owner = owner
  4. self.__balance = balance # 私有属性
  5. def deposit(self, amount):
  6. if amount > 0:
  7. self.__balance += amount
  8. else:
  9. raise ValueError("Deposit amount must be positive")
  10. def withdraw(self, amount):
  11. if 0 < amount <= self.__balance:
  12. self.__balance -= amount
  13. else:
  14. raise ValueError("Insufficient funds or invalid amount")
  15. def get_balance(self):
  16. return self.__balance
  17. # 创建实例
  18. account = Account("John")
  19. account.deposit(100)
  20. print(account.get_balance())

4.2 Concepto de interfaz

Una interfaz es la única forma en que un objeto interactúa con el mundo exterior. A través de interfaces, el código externo puede llamar a los métodos del objeto pero no puede acceder directamente al estado interno del objeto.

ejemplo:

  1. class Car:
  2. def __init__(self, model):
  3. self.model = model
  4. self.__engine_started = False
  5. def start_engine(self):
  6. if not self.__engine_started:
  7. self.__engine_started = True
  8. return "Engine started"
  9. else:
  10. return "Engine is already running"
  11. def stop_engine(self):
  12. if self.__engine_started:
  13. self.__engine_started = False
  14. return "Engine stopped"
  15. else:
  16. return "Engine is not running"
  17. # 创建实例
  18. car = Car("Toyota")
  19. print(car.start_engine())
  20. print(car.stop_engine())

4.3 La comprensión de Xiao Li

El embalaje es como la carcasa de un teléfono móvil. Los circuitos y componentes (estado del objeto) dentro del teléfono móvil están encapsulados en la carcasa. El usuario sólo puede interactuar con el teléfono móvil a través de los botones y la pantalla (interfaz), pero no puede contactar directamente con los componentes internos.

5. Herencia

heredar Es otro concepto central de la programación orientada a objetos, que nos permite crear una nueva clase basada en una clase existente. La nueva clase hereda todas las propiedades y métodos de la clase existente.

5.1 El concepto de herencia

La herencia es cuando una clase (subclase) obtiene propiedades y métodos de otra clase (clase principal). A través de la herencia, las subclases pueden reutilizar el código de la clase principal, agregar nuevas propiedades y métodos o anular los métodos de la clase principal.

ejemplo:

  1. class Animal:
  2. def __init__(self, name):
  3. self.name = name
  4. def speak(self):
  5. pass
  6. class Dog(Animal):
  7. def speak(self):
  8. return "Woof!"
  9. class Cat(Animal):
  10. def speak(self):
  11. return "Meow!"
  12. # 创建实例
  13. dog = Dog("Rex")
  14. cat = Cat("Whiskers")
  15. print(dog.speak())
  16. print(cat.speak())

5.2 Método de reescritura

Una subclase puede anular el método de la clase principal, es decir, definir un método con el mismo nombre que la clase principal en la subclase para lograr diferentes funciones.

ejemplo:

  1. class Shape:
  2. def area(self):
  3. return 0
  4. class Rectangle(Shape):
  5. def __init__(self, width, height):
  6. self.width = width
  7. self.height = height
  8. def area(self):
  9. return self.width * self.height
  10. class Circle(Shape):
  11. def __init__(self, radius):
  12. self.radius = radius
  13. def area(self):
  14. return 3.14 * (self.radius ** 2)
  15. # 创建实例
  16. rectangle = Rectangle(3, 4)
  17. circle = Circle(5)
  18. print(rectangle.area())
  19. print(circle.area())

5.3 La comprensión de Xiao Li

La herencia es como un legado que los padres dan a sus hijos. Los padres (clase principal) pasan sus propiedades (propiedades y métodos) a sus hijos (subclases), y los hijos no solo pueden usar estas propiedades, sino que también pueden enriquecerse con sus propios esfuerzos (agregando nuevas propiedades y métodos).

6. Polimorfismo

Polimorfismo Significa que el mismo método tiene diferentes manifestaciones en diferentes objetos. El polimorfismo nos permite llamar a métodos de diferentes objetos a través de la misma interfaz para lograr diferentes funciones.

6.1 El concepto de polimorfismo

El polimorfismo es una de las características importantes de la programación orientada a objetos. Apunta a objetos de subclase a través de referencias de clases principales, lo que permite que el mismo método tenga diferentes implementaciones. El polimorfismo aumenta la flexibilidad y escalabilidad del código.

ejemplo:

  1. class Animal:
  2. def speak(self):
  3. pass
  4. class Dog(Animal):
  5. def speak(self):
  6. return "Woof!"
  7. class Cat(Animal):
  8. def speak(self):
  9. return "Meow!"
  10. def animal_sound(animal):
  11. print(animal.speak())
  12. # 创建实例
  13. dog = Dog()
  14. cat = Cat()
  15. animal_sound(dog)
  16. animal_sound(cat)

 

6.2 Implementar polimorfismo

En Python, el polimorfismo generalmente se implementa mediante la anulación de métodos y referencias a clases principales. Al señalar el objeto de la subclase a través de la referencia de la clase principal, puede llamar al método de la subclase.

ejemplo:

  1. class Shape:
  2. def draw(self):
  3. pass
  4. class Rectangle(Shape):
  5. def draw(self):
  6. return "Drawing a rectangle"
  7. class Circle(Shape):
  8. def draw(self):
  9. return "Drawing a circle"
  10. def draw_shape(shape):
  11. print(shape.draw())
  12. # 创建实例
  13. rectangle = Rectangle()
  14. circle = Circle()
  15. draw_shape(rectangle)
  16. draw_shape(circle)

 

6.3 La comprensión de Xiao Li

El polimorfismo es como un control remoto universal. Ya sea que se trate de controlar un televisor, aire acondicionado o estéreo, siempre que estos dispositivos tengan las interfaces (métodos) correspondientes, el control remoto (referencia de clase principal) puede implementar diferentes funciones a través de los mismos botones (llamadas a método).

7. Introspección/Reflexión

introspección Significa que el objeto puede conocer su propia información en tiempo de ejecución. Python proporciona algunas funciones integradas para la introspección, comotype()id()hasattr() esperar.

7.1 El concepto de introspección

La introspección significa que un objeto puede obtener su propia información en tiempo de ejecución, como propiedades, métodos, etc. La introspección hace que los programas Python sean muy dinámicos y flexibles.

ejemplo:

  1. class Person:
  2. def __init__(self, name, age):
  3. self.name = name
  4. self.age = age
  5. person = Person("Alice", 30)
  6. # 使用内置函数进行自省
  7. print(type(person))
  8. print(hasattr(person, "name"))
  9. print(getattr(person, "name"))
  10. setattr(person, "name", "Bob")
  11. print(person.name)
  12. delattr(person, "name")

7.2 Uso de la introspección para operaciones dinámicas

A través de la introspección, podemos manipular dinámicamente las propiedades y métodos de los objetos en tiempo de ejecución, haciendo que el programa sea más flexible y dinámico.

ejemplo:

  1. class Car:
  2. def __init__(self, model):
  3. self.model = model
  4. self.speed = 0
  5. def accelerate(self):
  6. self.speed += 5
  7. return self.speed
  8. car = Car("Toyota")
  9. # 动态操作对象
  10. if hasattr(car, "accelerate"):
  11. method = getattr(car, "accelerate")
  12. print(method())
  13. print(method())
  14. # 动态设置属性
  15. setattr(car, "color", "red")
  16. print(car.color)

7.3 La comprensión de Xiao Li

El autoexamen es como mirarse en el espejo. A través del espejo (mecanismo de introspección), las personas pueden ver cómo se ven (propiedades y métodos de los objetos) y hacer los ajustes necesarios (manipulación dinámica de los objetos).

8. Métodos estáticos y métodos de clase.

método estático ymétodo de clase Son métodos asociados con la clase, no con la instancia.Uso de métodos estáticos@staticmethod Decorador, uso del método de clase.@classmethod Decorador.

8.1 Métodos estáticos

Un método estático es un método de una clase, pero no está vinculado a ninguna instancia de clase. Los métodos estáticos no pueden acceder a instancias de una clase ni pueden modificar el estado de la clase. Suelen utilizarse para realizar alguna operación que no tiene nada que ver con la clase, pero que lógicamente pertenece a la funcionalidad de la clase.

ejemplo:

  1. class Math:
  2. @staticmethod
  3. def add(a, b):
  4. return a + b
  5. print(Math.add(5, 3))

 

8.2 Métodos de clase

Los métodos de clase son métodos que están vinculados a la clase en lugar de a la instancia.El primer argumento de un método de clase es la clase misma, normalmente denominadacls . Los métodos de clase pueden acceder a las propiedades de la clase y a otros métodos de clase.

ejemplo:

  1. class Math:
  2. factor = 2
  3. @classmethod
  4. def multiply(cls, value):
  5. return cls.factor * value
  6. print(Math.multiply(5))

Resumir

Todos los aspectos de la programación orientada a objetos en Python, incluidos los conceptos básicos de la programación orientada a objetos, abstracciones, clases e instancias, encapsulación, herencia, polimorfismo, introspección y métodos estáticos y de clase.

Espero que este blog detallado pueda ayudarlo a comprender profundamente la programación orientada a objetos en Python y aplicar este conocimiento en proyectos reales. Si tiene alguna pregunta o necesita más ayuda, ¡no dude en ponerse en contacto conmigo!