Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Qué hace el descriptor de Python?

¿Qué hace el descriptor de Python?

Este artículo presenta principalmente la definición de descriptores, así como algunos entendimientos personales. Espero que después de leer este artículo, tenga una comprensión más clara de los descriptores.

Qué es un descriptor

Definición oficial: un descriptor es un atributo de objeto con "comportamiento vinculante". Al acceder (obtener, configurar y eliminar) sus propiedades, en realidad se llaman métodos especiales (_get_(), _set_(), _delete_()). Es decir, si un objeto define cualquiera de estos tres métodos, entonces es un descriptor.

La función del descriptor es representar los atributos de la clase. Cabe señalar que el descriptor no se puede definir en el constructor de la clase utilizada. Solo se puede definir como un atributo de la clase. Solo pertenece a la clase y no pertenece a una instancia, podemos confirmarlo consultando el diccionario de instancias y clases.

Los descriptores son el medio para implementar la mayoría de las características de la clase Python en la estructura de datos de nivel más bajo. A menudo utilizamos atributos como @classmethod, @staticmethd, @property e incluso __slots__ a través de descriptores. Es una de las herramientas clave para muchas bibliotecas y marcos de alto nivel, y una parte importante de marcos más grandes que utilizan decoradores o metaclases. Nota: Conceptos como decoradores y metaclases se explicarán en artículos futuros.

Aquí hay un ejemplo de un descriptor y el código que hace referencia a la clase de descriptor:

Descriptores de clase:

def __init__(self, key, value_type):

self.key = clave

self.value_ type = value_type

def __get__(self, instancia, propietario):

imprimir ( "Ejecutando get de Descriptores")

return instancia.__dict__[self.key]

def __set__(self, instancia, valor):

print( "Ejecutando el conjunto de descriptores")

si no es instancia(valor, self.value_type):

rise TypeError("El argumento %s debe ser %s"%(self.key, self .value_type))

instancia.__dict__[self.key] = valor

def __delete__(self, instancia):

print("Ejecutando eliminación de descriptores")< / p>

instancia.__dict__.pop(self.key)

clase Persona:

nombre = Descriptores("nombre", str)

edad = Descriptores("edad", int)

def __init__(self, nombre, edad):

self.name = nombre

self.age = edad

persona = Persona("xiaoming ", 15)

print(persona.__dict__)

persona.nombre

persona. name = "jone"

print(person.__dict__) donde la clase Descriptores es un descriptor. Persona es una clase que utiliza descriptores.

El atributo __dict__ de una clase es un atributo integrado de la clase. Las funciones estáticas, funciones de clase, funciones ordinarias, variables globales y algunos atributos integrados de la clase se colocan en el __dict__ de. la clase.

Al exportar una variable de descriptor, se llamará al método __get__ en el descriptor; al configurar una variable de descriptor, se llamará al método __set__ en el descriptor.

Los resultados de ejecutar el ejemplo anterior son los siguientes: