Lectura de notas-polimorfismo en Python

Extraído del "Manual de aprendizaje de Python" Capítulo 16 Funciones básicas

Introducción

Definición de función y llamada

definición

def times(x,y):
	return x*y

El código anterior define una función llamada tiempos que devolverá el producto de sus dos parámetros.

Llamar a la
declaración def creó una función pero no la ejecutó. Después de ejecutar def, puede llamar a esta función en el programa agregando paréntesis después del nombre de la función. Los corchetes contienen n parámetros de objeto, que se pasan (asignan) al nombre del parámetro formal del encabezado de función:

>>times(2,4)
8

Inserte la descripción de la imagen aquí
La segunda llamada pasó dos tipos de objetos completamente diferentes. Como se muestra arriba.
Esta vez la función es completamente diferente. La segunda llamada pasa una cadena y un número entero a xey en lugar de dos números. En resumen, funciona *tanto para números como para secuencias. Porque en Python, nunca ha habido una declaración de tipo para variables, parámetros o valores de retorno, por lo que podemos usar tiempos como una multiplicación de números o como una repetición de secuencia.
En otras palabras, los tiempos de la función dependen del valor que se le pasa. Este es uno de los conceptos centrales en Python (también uno de los trucos de usar Python)

Polimorfismo en Python

Como hemos visto, *el significado de la expresión xey en la función de tiempos depende enteramente de los tipos de objeto de xey, la misma función realiza multiplicación en una instancia, pero repetición en otra instancia. . Python pone la racionalidad de un determinado objeto bajo una determinada sintaxis al objeto mismo para juzgar. En otras palabras, *como mecanismo de despacho, el control de ejecución se transfiere al objeto que se está procesando.
Este comportamiento dependiente del tipo se denomina polimorfismo y su significado es que el significado de una operación depende del tipo de objeto operado. Debido a que Python es un lenguaje escrito dinámicamente, el polimorfismo se puede ver en todas partes en Python. De hecho, todas las operaciones en Python son polimórficas: impresión, índice, *operadores y más.
Esto es intencional y puede considerarse como una manifestación de la simplicidad y flexibilidad del lenguaje. Las funciones se pueden aplicar automáticamente a todo tipo de objetos, siempre que los objetos admitan la interfaz esperada (protocolo), la función puede manejarlos. En otras palabras, si el objeto pasado a la función admite los métodos y operadores de expresión esperados, entonces tienen compatibilidad plug-and-play para la lógica de la función.
Además, si el objeto entrante no es compatible con esta interfaz esperada, Python detectará un error cuando la expresión * se esté ejecutando y generará automáticamente una excepción. Por lo tanto, generalmente no tiene sentido escribir una verificación de errores de código. De hecho, hacerlo limitará la función de la función, porque limitará la función a aquellos tipos que pasan las pruebas que escribimos. Desde una perspectiva macro, Python está programando para interfaces de objetos, no para tipos de datos.

Revisar el polimorfismo

Inserte la descripción de la imagen aquí
La función de intersección también es polimórfica y puede admitir varios tipos siempre que admita la interfaz de objeto correspondiente. Como se muestra en la figura anterior, pasamos objetos de diferentes tipos (una lista y una tupla (tipo mixto)) a la función, y aún así seleccionamos los elementos comunes, porque no es necesario definir el tipo de los parámetros especificados por adelantado. Esta función de intersección es muy Dispuesto a iterar sobre cualquier secuencia de objetos que se le haya pasado, siempre que estas secuencias admitan la interfaz esperada.
Para la función de intersección, esto significa que el primer parámetro debe admitir bucles y el segundo parámetro es compatible con pruebas de miembros. Todos los objetos que cumplen estos dos puntos pueden funcionar normalmente, independientemente de su tipo específico, esto incluye secuencias almacenadas físicamente, como cadenas y listas.

¿Qué hay de malo en la práctica de "comprobar el tipo de objeto pasado a la función"?
La verificación del tipo de objeto pasado a la función esencialmente destruye la flexibilidad de la función y restringe la función a un tipo específico. Sin tales verificaciones, la función puede manejar una gama más amplia de tipos de objetos; cualquier interfaz esperada por la función de soporte Todos los objetos serán aplicables (el término interfaz se refiere a un conjunto de métodos y operadores de expresión ejecutados por una función)

Supongo que te gusta

Origin blog.csdn.net/qq_38469784/article/details/110853910
Recomendado
Clasificación