Programación orientada a objetos (OOP): comprender los conceptos clave de clases y encapsulación

Objeto

¿Qué es un objeto?

Un objeto es un área de memoria dedicada a almacenar datos. Se pueden almacenar varios datos en objetos, como números, valores booleanos y códigos. El objeto consta de tres partes:

  1. El identificador del objeto (id)
  2. Tipo de objeto (tipo)
  3. El valor del objeto.

Orientado a objetos (POO)

Python es un lenguaje de programación orientado a objetos. El llamado lenguaje orientado a objetos simplemente entiende que todas las operaciones en el lenguaje se realizan a través de objetos.

lenguaje de programación procedimental

Orientado a procesos se refiere a descomponer la lógica de nuestro programa en pasos uno por uno y completar el programa abstrayendo cada paso. Por ejemplo, el proceso de ir a la escuela de un niño se puede dividir en varios pasos:

  1. mamá se levanta
  2. mamá va al baño
  3. mamá lava
  4. mamá prepara el desayuno
  5. La madre despierta al niño
  6. el niño va al baño
  7. El niño necesita lavarse.
  8. los niños comen
  9. Niño llevando mochila a la escuela

La idea de programación orientada a procesos descompone una función en pequeños pasos y completa un programa completando cada pequeño paso. Este método de programación es relativamente simple y está en línea con el pensamiento humano. Sin embargo, su reutilización es baja y su mantenimiento es difícil.

lenguaje de programación orientado a objetos

Los lenguajes de programación orientados a objetos se centran en objetos más que en procesos. Para los lenguajes orientados a objetos, todo es un objeto. Por ejemplo, la madre del niño se despierta y llama al niño para que vaya a la escuela.

La idea de programación orientada a objetos guarda uniformemente todas las funciones en los objetos correspondientes. Para utilizar una determinada función, simplemente busque el objeto correspondiente directamente. El código escrito de esta manera es fácil de leer, fácil de mantener y fácil de reutilizar. Sin embargo, este método es un poco más complicado de escribir y no se ajusta al pensamiento convencional.

En resumen, el pensamiento de programación orientada a objetos incluye principalmente dos pasos:

  1. encuentra un compañero
  2. Participar en objetos

clase

En Python, podemos usar objetos integrados (como int, float, str, etc.) para crear objetos. Sin embargo, no puede satisfacer todas las necesidades, por lo que a menudo necesitamos personalizar algunos objetos. En pocas palabras, una clase equivale a un dibujo. Necesitamos crear objetos basados ​​en clases en el programa. Algunas personas también dicen que los objetos son instancias de clases. Si se crean varios objetos a través de una clase, llamamos a estos objetos una clase de objetos, al igual que objetos como int(), float(), bool(), str(), list(), dict(). Al definir su propia clase, debe comenzar con una letra mayúscula y usar mayúsculas y minúsculas (notación Pascal) para nombrar la clase.

#定义一个简单的类
class MyClass():
    pass

mc = MyClass()

El proceso de creación de objetos usando clases.

Utilice clases para crear objetos como llamar a una función. Su proceso es el siguiente:

1. Crea una variable

2. Crea un nuevo objeto en la memoria.

3. Asigne la identificación del objeto a la variable.

Definición de clase

De hecho, las clases y los objetos son abstracciones de cosas de la vida real o del contenido de los programas. Dentro del bloque de código de una clase, podemos definir variables y funciones. La variable se convertirá en una propiedad pública de la instancia de clase y se podrá acceder a todas las instancias de la clase en forma de objeto.nombre de propiedad. La función se convertirá en un método público de la instancia de la clase y todas las instancias de la clase pueden llamar al método en forma de object.methodname(). Al definir un método, se debe definir al menos un parámetro formal. Al llamar a un método, el analizador primero buscará el atributo o método en el objeto actual, de lo contrario lo buscará en el objeto de clase del objeto actual. Si todavía no hay ningún objeto de clase, se informará un error.

#定义一个简单的人类
class Person :
    name = 'swk' # 公共属性,所有实例都可以访问

    def say_hello(self) :
        print('你好!我是 %s' %self.name)
        
p1 = Person()
p2 = Person()

p1.name = '猪八戒'

p1.say_hello() # '你好!我是 猪八戒'
p2.say_hello() # '你好!我是 swk'

demostración de código

#定义一个简单的类
class MyClass():
    pass

#使用MyClass创建一个对象
mc = MyClass() # mc就是通过MyClass创建的对象,mc是MyClass的实例
mc_2 = MyClass()
mc_3 = MyClass()
mc_4 = MyClass()

# isinstance()用来检查一个对象是否是一个类的实例
result = isinstance(mc_2,MyClass)

#现在我们通过MyClass这个类创建的对象都是一个空对象
#也就是对象中实际上什么都没有,就相当于是一个空的盒子
#可以向对象中添加变量,对象中的变量称为属性
#语法:对象.属性名 = 属性值
mc.name = '孙悟空'
mc_2.name = '猪八戒'

print(mc_2.name)

#定义一个简单的人类
class Person :
    name = 'swk' # 公共属性,所有实例都可以访问

    def say_hello(self) :
        print('你好!我是 %s' %self.name)
        
p1 = Person()
p2 = Person()

p1.name = '猪八戒'

p1.say_hello() # '你好!我是 猪八戒'
p2.say_hello() # '你好!我是 swk'

Métodos de inicialización y propiedades de instancia.

En una clase, podemos definir un método especial llamado método de inicialización ( init ), que se llama automáticamente cuando se crea un objeto. El método de inicialización puede aceptar parámetros y asignarlos a las propiedades del objeto. De esta forma podemos establecer diferentes valores iniciales para cada objeto.

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def say_hello(self):
        print(f"你好!我是{
      
      self.name},今年{
      
      self.age}岁。")

En el código anterior, definimos una Personclase que tiene dos propiedades de instancia: namey age. El método de inicialización acepta dos parámetros y los asigna a las propiedades del objeto. Al crear objetos y llamar say_helloa métodos, podemos acceder y modificar estas propiedades.

Propiedades de clase y métodos de clase.

Además de propiedades de instancia y métodos de instancia, las clases también pueden tener propiedades de clase y métodos de clase.

Los atributos de clase son atributos que pertenecen a la clase misma, no a la instancia. Todas las instancias de esta clase pueden acceder y modificar las propiedades de la clase.

class Person:
    count = 0  # 类属性

    def __init__(self, name):
        self.name = name
        Person.count += 1  # 每创建一个实例,count加1

    @classmethod
    def get_count(cls):
        return cls.count  # 使用cls访问类属性

En el código anterior, definimos un countatributo de clase que registra el número de instancias creadas. Cada vez que se crea una instancia, el atributo de clase se countincrementa en 1 mediante el método de inicialización. A través de métodos de clase get_count(), podemos obtener la cantidad de instancias creadas hasta el momento.

Herencia y polimorfismo.

Las clases en Python también admiten la herencia, donde una clase puede heredar propiedades y métodos de otra clase. Las subclases pueden anular los métodos de la clase principal para lograr efectos polimórficos.

class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        print(f"{
      
      self.name}汪汪叫")

class Cat(Animal):
    def speak(self):
        print(f"{
      
      self.name}喵喵叫")

En el código anterior, hemos definido una Animalclase que tiene un speakmétodo. Luego, definimos la clase Dogy Catdos subclases respectivamente Animal. Las subclases pueden anular los métodos de las clases principales, lo cual es una manifestación de polimorfismo. Al crear objetos Dogy Catpodemos llamar a sus respectivos speakmétodos.

metodo magico

Además del método de inicialización ( init ), existen muchos métodos especiales en Python, también llamados métodos mágicos. Estos métodos especiales comienzan y terminan con un doble guión bajo y se llaman automáticamente en un momento específico.

class Person:
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return f"Person对象:{
      
      self.name}"

    def __eq__(self, other):
        return self.name == other.name

En el código anterior, definimos dos métodos mágicos: __str__y __eq__.

  • __str__Método utilizado para definir una representación de cadena de un objeto. Este método se llama automáticamente y devuelve una representación de cadena cuando se llama printo utiliza la función.str()
  • __eq__Los métodos se utilizan para definir la igualdad de objetos. Acepta otro objeto como parámetro y determina si los dos objetos son iguales según una lógica personalizada.

Al implementar estos métodos mágicos, podemos controlar mejor el comportamiento de nuestros objetos y hacerlo más consistente con nuestras expectativas.

resumen

En este capítulo, presentamos los conceptos básicos y el uso de las clases de Python. Desde métodos de inicialización hasta propiedades de instancia, propiedades de clase, métodos de clase, herencia y polimorfismo, tenemos una comprensión profunda paso a paso de las diversas características y usos de las clases. Al mismo tiempo, también aprendimos sobre la función y el uso de los métodos mágicos, que pueden implementarse para personalizar el comportamiento de la clase.

encapsulación de clases

En la programación orientada a objetos, la encapsulación es un concepto importante. Se refiere a combinar datos y métodos en una sola entidad y ocultar detalles de implementación específicos desde el exterior.

Las clases en Python proporcionan un mecanismo de encapsulación. Podemos utilizar modificadores de acceso para controlar la accesibilidad de propiedades y métodos.

  • Modificador de acceso público: no se utiliza ningún modificador y todas las propiedades y métodos son públicos de forma predeterminada. Se puede acceder a las propiedades y métodos públicos tanto dentro como fuera de la clase.
  • Modificador de acceso privado: utilice un guión bajo doble (__) como prefijo para definir propiedades y métodos privados. Solo se puede acceder a las propiedades y métodos privados dentro de la clase y no se puede acceder directamente fuera de la clase.
class Person:
    def __init__(self, name):
        self.__name = name  # 私有属性

    def __say_hello(self):  # 私有方法
        print(f"你好!我是{
      
      self.__name}。")

    def greet(self):
        self.__say_hello()

En el código anterior, namey say_helloambos son miembros privados. Las propiedades y métodos privados se pueden definir utilizando un guión bajo doble como prefijo. Dentro de la clase podemos acceder directamente a estos miembros privados. Fuera de la clase, no se puede acceder directamente a los miembros privados, pero se puede acceder a ellos indirectamente a través de métodos públicos.

Descriptores y descriptores de propiedad

Además de acceder directamente a las propiedades, también podemos utilizar descriptores de acceso a propiedades (captadores) y definidores de propiedades (establecedores) para controlar el acceso y la modificación de propiedades.

class Person:
    def __init__(self, name):
        self.__name = name

    @property
    def name(self):  # 属性访问器
        return self.__name

    @name.setter
    def name(self, value):  # 属性设置器
        if isinstance(value, str):
            self.__name = value
        else:
            raise ValueError("姓名必须是字符串类型")

En el código anterior, definimos @propertyun descriptor de acceso a la propiedad usando un decorador llamado name(). Accediendo a obj.name, podemos obtener __nameel valor de una propiedad privada. Luego, usamos @name.setterel decorador para definir un definidor de propiedades, también llamado name(). Mediante cesión obj.name = value, podemos modificar __nameel valor de una propiedad privada.

La ventaja de esto es que cuando usamos propiedades de objetos externamente, podemos acceder a ellas como a propiedades ordinarias sin acceder directamente a propiedades privadas.

resumen

En este artículo, presentamos la encapsulación y el control de acceso a atributos de las clases de Python. Al utilizar modificadores de acceso, propiedades privadas y métodos, podemos ocultar los detalles de implementación de una clase y proporcionar una interfaz pública para uso externo. También aprendimos cómo utilizar definidores y descriptores de acceso a propiedades para controlar el acceso y la modificación de propiedades.

Resumir

Este artículo presenta algunos conceptos y técnicas importantes en la programación orientada a objetos, incluidos objetos, clases, herencia, polimorfismo, métodos mágicos, etc. Al usar clases y objetos, podemos combinar datos y métodos en una sola entidad para lograr la encapsulación y reutilización del código.

En los lenguajes de programación procedimental, la atención se centra principalmente en los procedimientos y funciones del programa. En los lenguajes de programación orientados a objetos, descomponemos el programa en objetos, cada uno de los cuales tiene sus propios datos y métodos. De esta manera es más flexible y fácil de entender.

Una clase es una plantilla para un objeto y se pueden crear varios objetos de instancia definiendo una clase. Las clases se componen de atributos y métodos, los atributos almacenan los datos del objeto y los métodos definen el comportamiento del objeto.

Los métodos de inicialización y las propiedades de instancia se utilizan para inicializar el estado de un objeto cuando se crea. Los atributos de clase son propiedades compartidas por todas las instancias y los métodos de clase son métodos que actúan sobre toda la clase en lugar de sobre una sola instancia.

La herencia y el polimorfismo son dos conceptos importantes en la programación orientada a objetos. Mediante la herencia, podemos crear nuevas clases y heredar propiedades y métodos de clases existentes. El polimorfismo permite que diferentes objetos implementen el mismo método de manera diferente, mejorando la flexibilidad y escalabilidad del código.

Los métodos mágicos son métodos con nombres especiales en Python que se utilizan para implementar funciones o comportamientos específicos, como inicialización, comparación, sobrecarga de operadores, etc.

Además, este artículo también presenta la encapsulación de clases y el control de acceso a atributos. Al utilizar modificadores de acceso, propiedades privadas y métodos, puede ocultar los detalles de implementación de una clase y proporcionar una interfaz pública para uso externo. Los configuradores y descriptores de acceso a propiedades pueden controlar el acceso y la modificación de propiedades, lo que aumenta la seguridad y la capacidad de mantenimiento del código.

Considerándolo todo, la programación orientada a objetos es un poderoso paradigma de programación que puede lograr la modularización, reutilización y flexibilidad del código al descomponer programas en objetos. Dominar conceptos y técnicas como definición de clases, herencia, polimorfismo y métodos mágicos, y ser capaz de escribir código más estructurado y escalable.

Columnas boutique Python recomendadas


Conocimientos básicos de Python (0 introducción básica)

[Conocimientos básicos de Python] 0.función print()
[conocimientos básicos de Python] 1. Tipos de datos, aplicaciones de datos, conversión de datos
[conocimientos básicos de Python] 2. if juicio condicional y anidamiento de condiciones
[conocimientos básicos de Python] 3.funciones input()
[Conocimientos básicos de Python] 4. Listas y diccionarios
[Conocimientos básicos de Python] 5. Bucles For y while
[Conocimientos básicos de Python] 6. Valores booleanos y cuatro tipos de declaraciones (romper, continuar, pasar, demás)
[Conocimientos básicos de Python] 7. Operación práctica: use Python para implementar el juego "Word PK" (1)
[Conocimientos básicos de Python] 7. Operación práctica: use Python para implementar el juego "Word PK" (2)
[Python básico conocimiento] 8. Pensamiento de programación: cómo resolver problemas - Capítulo de pensamiento
[Conocimientos básicos de Python] 9. Definición y llamada de funciones
[Conocimientos básicos de Python] 10. Escribir programas con funciones - Capítulo práctico
[Conocimientos básicos de Python] 10. Uso de Python para implementar el juego piedra, papel y tijera - Capítulo de operación de práctica de funciones
[Conceptos básicos de Python] 11. Cómo depurar - Razones de errores comunes e ideas para la solución de problemas - Capítulo de pensamiento
[Conceptos básicos de Python] 12. Clases y objetos (1)
[Conceptos básicos de Python ] 12. Clases y objetos (2)
[Conceptos básicos de Python] Conocimiento] 13. Clases y objetos (3)
[Conocimientos básicos de Python] 13. Clases y objetos (4)
[Conocimientos básicos de Python] 14. Construcción de un sistema de gestión de biblioteca (operación práctica de clases y objetos)
[Conocimientos básicos de Python] 15. Conocimientos básicos de codificación
[Conocimientos básicos de Python] 16. Fundamentos de lectura, escritura y operaciones de archivos
[Conocimientos básicos de Python] 16. Implementación en Python de "Preguntas de dictado de poemas antiguos" (Lectura, escritura y codificación de archivos - operación práctica)
[Conocimientos básicos de Python] 17. El concepto de módulos y cómo introducirlo
[conceptos básicos de Python] 18. Operación práctica: uso de Python para enviar automáticamente correos electrónicos masivos
[conceptos básicos de Python] 19. Pensamiento del producto y uso de diagramas de flujo: pensamiento
[conceptos básicos de Python] 20. implementación de Python de "qué comer en el almuerzo" (Pensamiento de producto - Operación práctica)
[Conocimientos básicos de Python] 21. La forma correcta de abrir de manera eficiente y perezosa - Graduación
[procesamiento de archivos Python] Lectura, procesamiento y escritura de archivos CSV
[procesamiento de archivos Python ] Procesamiento automático de Excel (usando openpyxl)
[procesamiento de archivos python] -procesamiento de formato excel


conocimiento del rastreador de Python

[rastreador de python] 1. Conocimientos básicos de rastreadores
[rastreador de python] 2. Conocimientos básicos de páginas web
[rastreador de python] 3. Primera experiencia con rastreadores (análisis BeautifulSoup)
[rastreador de python] 4. Operación práctica del rastreador (rastreo de platos)
[python rastreador] 5. Operación práctica del rastreador (rastreo de letras)
[rastreador de Python] 6. Operación práctica del rastreador (solicitud de datos con parámetros)
[rastreador de Python] 7. ¿Dónde se almacenan los datos rastreados?
[rastreador de python] 8. Revise el pasado y aprenda lo nuevo
[rastreador de python] 9. Inicie sesión con cookies (cookies)
[rastreador de python] 10. Ordene al navegador que funcione automáticamente (selenium)
[rastreador de python] 11. Deje que el rastreador informarle a tiempo
[rastreador de Python] 12. Construya su ejército de rastreadores
[rastreador de Python] 13. Qué comer sin engordar (ejercicio práctico del rastreador)
[rastreador de Python] 14. Explicación del marco Scrapy
[rastreador de Python] 15. Práctica del marco Scrapy (Toma popular de rastreo de trabajos)
[rastreador de Python] 16. Resumen y revisión de los puntos de conocimiento del rastreador

Supongo que te gusta

Origin blog.csdn.net/qq_41308872/article/details/132848250
Recomendado
Clasificación