Interfaz, protocolo y tipo de pato

Extraído de "Smooth Python" 10.3 Protocolos y tipos de pato; Charla variada: Trate los protocolos como interfaces informales; 11.1 Interfaces y protocolos en la cultura Python

Además de las clases base abstractas en Python, cada clase tiene una interfaz: atributos públicos (métodos o atributos de datos) implementados o heredados por la clase, incluidos métodos especiales como __getitem__ o __add__.

Por definición, las propiedades protegidas y privadas no están en la interfaz: incluso las propiedades "protegidas" solo se implementan mediante una convención de nomenclatura (un guión bajo al principio); se puede acceder fácilmente a las propiedades privadas.

Con respecto a la interfaz, aquí hay una definición complementaria útil: una interfaz es una colección de métodos que implementan un rol específico. Una clase puede implementar múltiples interfaces, lo que permite que la instancia desempeñe múltiples roles. El término "objeto similar a un archivo" u "objeto iterable" en la documentación de Python significa esto, que no se refiere a una clase específica.

En la programación orientada a objetos, un protocolo es una interfaz informal que solo se define en el documento, no en el código. Por ejemplo, el protocolo de secuencia de Python solo requiere dos métodos, __len__ y __getitem__. Cualquier clase (como Spam), siempre que estos dos métodos se implementen utilizando firmas y semánticas estándar, se puede utilizar siempre que se espere una secuencia. No importa si Spam es una subclase de qué clase, siempre que se proporcionen los métodos necesarios. Lo llamamos secuencia, porque se comporta como una secuencia, y este es el punto.

No compruebe si es un pato, si suena como un pato, si camina como un pato, etc. Lo que debe verificar depende de los comportamientos del idioma que desee utilizar.

El protocolo es una interfaz, pero no es formal (solo se define por documentos y convenciones), por lo que el protocolo no puede imponer restricciones como una interfaz formal (la clase base abstracta explicará la coherencia de la interfaz obligatoria más adelante en este capítulo). Por lo tanto, si conoce los escenarios de uso específicos de la clase, generalmente solo necesita implementar una parte del protocolo. Por ejemplo, para admitir la iteración, solo es necesario implementar el método __getitem__ y el método __len__ no es necesario.

En la documentación de Python, si ve la expresión "objeto similar a un archivo", generalmente es un protocolo. Este es un término corto que significa: "El comportamiento es básicamente el mismo que el del archivo, que implementa parte de la interfaz del archivo y satisface las necesidades relacionadas con el contexto".

Definimos el protocolo como una interfaz informal, que es una forma de hacer que Python, un lenguaje escrito dinámicamente, logre polimorfismo.
 

Supongo que te gusta

Origin blog.csdn.net/Airfrozen/article/details/104377016
Recomendado
Clasificación