Python que aprende el polimorfismo y los tipos de pato

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

 

Supongo que te gusta

Origin www.cnblogs.com/imark7/p/12688981.html
Recomendado
Clasificación