El método de la doble pitón --- le llevará a ver el pitón lógica subyacente (__ __ str, __ __ repr, __ __ del, __ call__)

Estamos en el proceso de escribir código, a menudo recoger directamente las funciones de llamada, tal como len (), print () de entrada () y así sucesivamente, de hecho, estos métodos o funciones durante la llamada, provocaron una gran cantidad de mecanismo de funcionamiento interno y la lógica subyacente, después de una investigación en profundidad, podemos ver una pitón diferente, las siguientes participaciones de unos pocos su lógica de dos bajo par método y funcionamiento con usted.
Método Double Down: se refiere al método con doble subrayado, tales como nuestro muy común en el __init__ clase, hoy queremos presentar __str__, repr , del , llamada :
---------- ------------------------- línea divisoria ----------------------- ------------
STR
definimos la clase un ejemplo, y cree una instancia:

class A:
    pass
a=A()
print(a)

La salida es:
< principal II.A, objeto en 0x0000026034D36E08>
Este resultado es realmente bueno de las direcciones de memoria, y se puede ver que es una subclase de objeto, modificar la prueba de código de nuevo:

class A:
    pass
    def __str__(self):
        return '我已经打印了'
a=A()
print(str(a))
print(a)

En esta salida es:
ya he impreso
He impreso
método __str__ explicado en la clase que se llama dos veces, que es la lógica:
Cuando el método () en la clase que llamamos str o imprimir un objeto desencadenado __str__ método, podemos utilizar esta función para establecer el valor de retorno que se necesita como referencia, cuando el objeto es un programa de impresión __str__ llamadas al método por defecto a un objetivo, y cuando el objeto no es un conjunto, cuando lo encuentren a llamar a la clase de objeto de los padres, y por eso hemos creado __str__ método, se activará la razón.
----------------------------------- línea divisoria ------------- ----------------------
la repr
la función repr () para convertir el objeto para lectura por el intérprete, y simplemente se convierte en su forma original. tal como

a='1'
print(a)
print(repr(a))

Resultados de impresión:
1
'1'
a través de un tipo de cadena de números, pero cuando nos imprimir directamente muestra el número 1, cuando se utiliza el repr, se muestra una cadena, es decir, su forma original. O el mismo ejemplo anterior, se cambiará str repr

class A:
    def __repr__(self):
        return '我已经打印了repr'
a = A()
print(a)

Los resultados son los siguientes:
Me han impreso repr

Del mismo modo, cuando una clase de objeto de impresión, esto desencadenará métodos, resultados y __str__ el mismo aspecto; si hay __str__ y __repr__ mismo tiempo, el orden es cómo el código que se está probando?

class A:
     def __str__(self):
        return '我已经打印了str'
     def __repr__(self):
        return '我已经打印了repr'
a = A()
print(a)

Los resultados son los siguientes:
Me han impreso str

la lógica ejecute: cuando str__ y __repr__ existir, precedencia __str , cuando no hay __str__, continuarán __repr__.
----------------------------------- línea divisoria ------------- ----------------------
método del__ destructor: cuando se haya completado la ejecución del programa que, se dará a conocer la memoria, a continuación, se disparará __del . Tales como los ejemplos siguientes:

class A:
    def __del__(self):
        print( '我已经执行了')
a = A()
del a

Creamos una instancia de la clase A objeto a, y luego eliminar una, se disparará __del__ método.
Los resultados son los siguientes:
he llevado a cabo
en este momento si imprimimos el objeto a, encontraremos los siguientes resultados:
NameError: no se define el nombre 'A'
Descripción usamos del para eliminar, no sólo va a desencadenar __del__ método objetos también se suprimen y es la primera implementación de la primera.
Porque no sólo en el uso de del gatillo se dispara al final del programa, la liberación de memoria, se puede utilizar como __del__ de terminar el trabajo, por lo que las operaciones tales como el cierre de archivos.
----------------------------------- línea divisoria ------------- ----------------------
de llamadas : este método por lo general que rara vez se ve, pero muy interesante, ver el siguiente código

class A:
    def __call__(self):
        print('我已经执行了')
a = A()()

Los resultados:
ya he implementado

De los resultados anteriores se pueden deducir, cuando un objeto más (), el método __call__ gatillo, los resultados reales de operación y nuestra idea es la misma.
Resumen:
. 1) STR : provocada cuando se imprime en la clase
2) la repr : provocada cuando se imprime en la clase, pero la presencia de __str__, __str__ preferentemente ejecutado
3). Del : del activan al realizar o liberar la memoria
4). Call : se activa cuando se añade el objeto ()
más aplicaciones, se puede tratar de explorar

Publicado 13 artículos originales · ganado elogios 1 · visitas 189

Supongo que te gusta

Origin blog.csdn.net/aa12551827/article/details/104919173
Recomendado
Clasificación