I. Polimorfismo y polimorfismo.
El polimorfismo se refiere a una variedad de cosas en una clase, como los animales en muchas formas: gatos, perros y cerdos.
clase Animal: #El mismo tipo de cosas: animal def talk (auto): pase la clase Cat (Animal): #Una de las formas animales: cat def talk (auto): print ( ' 喵 喵 喵' ) class Dog (Animal): # forma de dos animales: perros DEF Hablar (Ser): Imprimir ( ' corteza de Wang ' ) clase de cerdo (animal): # forma de tres animales: cerdos DEF Hablar (Ser): Imprimir ( ' hum hum ' )
El polimorfismo se refiere a que puede usar el objeto directamente sin tener en cuenta el tipo específico del objeto. Esto requiere que el diseño del objeto se unifique en un método: por ejemplo, gato, perro, cerdo son todos animales, pero todos los animales Debe haber un método de conversación, para que podamos usarlos directamente sin tener en cuenta qué tipo de animal son.
>>> cat.talk () miau miau miau >>> dog.talk () Wangwangwang >>> pig.talk () zumbido
Además, podemos definir una interfaz unificada para usar.
>>> def Talk (animal): ... animal.talk () ... >>> Talk (gato) miau miau >>> Talk (perro) 汪汪 汪 >>> Talk (cerdo) zumbido
Todo en Python es un objeto, que a su vez admite polimorfismo.
# Podemos contar directamente la longitud de los tres objetos sin tener en cuenta los tres tipos . __Len__ () l. __Len__ () t. __Len__ () # Python tiene una interfaz unificada len (s) len (l ) len (t)
La ventaja del polimorfismo es mejorar la flexibilidad y la extensibilidad del programa. Por ejemplo, se crea una nueva clase heredando la clase Animal. El objeto obj instanciado se puede usar de la misma manera que obj.talk ()
>>> clase Wolf (Animal): # Otra forma de animal: wolf ... def talk (self): ... print ('嗷 ...') ... >>> wolf = Wolf () # Instance 出 一头狼>>>> wolf.talk () # El usuario no necesita preocuparse sobre qué tipo de lobo es y llama a talk aw ...
En resumen, aprendimos que la esencia del polimorfismo es que las diferentes clases tienen el mismo nombre de método, por lo que podemos usar objetos de una manera independiente de la clase, y podemos introducir el concepto de clases abstractas en la clase principal. Para limitar la subclase debe tener ciertos nombres de métodos.
Importación ABC # Especifica el conjunto metaclase atributo de clase es una clase abstracta, una misma clase abstracta sólo se utiliza para restringir la subclase, no se pueden crear instancias de la clase Animal (metaclase = abc.ABCMeta): @ abc.abstractmethod # El decorador subclase debe limitar definir un método llamado charla DEF charla (Ser): # métodos abstractos sin implementar funciones específicas Pass clase gato (Animal): # cada vez heredada subclase animal debe seguir las normas establecidas por el Animal DEF charla (Ser): pase CAT = gato () # si no es una subclase de método llamado charla TypeError excepción lanzada, no se pueden crear instancias
Pero, de hecho, podemos confiar completamente en la herencia, solo necesitamos crear objetos que tengan la misma apariencia y comportamiento, y también podemos usar objetos independientemente del tipo de objeto. Este es exactamente el "tipeo de pato" que Python defiende: "Si parece Como gritar y caminar como un pato, entonces es un pato ". En comparación con el método de herencia, el tipo de pato logra un cierto grado de acoplamiento flexible del programa, en cierta medida, como se indica a continuación.
# Ambos se parece a un archivo, el archivo puede ser utilizado cuando el fin de su uso, pero no están directamente relacionados con la clase del Txt: # la clase Txt tiene el mismo nombre que el tipo de archivo con dos métodos, es decir, leer y escribir DEF leer (Ser) : pass def write (self): pass class Disco: # La clase Disk también tiene dos métodos con el mismo nombre que el tipo de archivo: read y write def read (self): pass def write (self): pass