--- refleja en pitón con la función de llamada y el método de cadenas

Nos encontraremos con una escena en aplicaciones prácticas: después de un código escrito, esperamos introducir las instrucciones de código de llamar directamente una función o método, la práctica habitual, vamos a utilizar una sentencia if para lograr,

a=input('<<<')
if a == 要输入的指令
代码块
elif a==要输入的指令
代码块
....

Cuando se juzga menos tiempo requerido, esto no es problema, pero requiere más código de determinación de tiempo, el código se convertirá en mucho tiempo.

A continuación, podemos utilizar la reflexión para alcanzar rápidamente esta funcionalidad.

Reflexión: tipo de datos es una cadena, a la variable manipulada, método, función y similares.

métodos reflectantes comúnmente utilizados son:

Método getattr () para obtener reflejada

el método hasattr () determina si hay reflejo, generalmente utilizado con getattr

1) se refleja en la clase. Se pueden obtener por el nombre del objeto de las propiedades y métodos del objeto, también se puede obtener una propiedad estática, métodos de clase, métodos estáticos y con el nombre de la clase. formato de código es el siguiente:

getattr (o nombre de la clase de objeto "nombre de la propiedad")

class A:
    def __init__(self,name):
        self.name=name
    def func(self):
        print('test')
a=A('apple')
print(a.name)
print(getattr(a,'name'))

El ejemplo de código anterior, las filas 7 y 8 se puede implementar requisitos, pero por el método getattr (), que puede alcanzar con una entrada de la interacción humana por ordenador (), tal como esto en los siguientes códigos:

class A:
    def __init__(self,name):
        self.name=name
    def func(self):
        print('test')
a=A('apple')
b=input('<<<')
print(getattr(a,b))

Podemos, la interacción hombre-máquina mediante la introducción de una propiedad a la vista

Si el método de la clase que se invoca, puede utilizar el siguiente código, c después de la reflexión generada dirección de memoria, por lo que debe llamar paréntesis espalda

c=getattr(a,'func') 
c()

--------------------------------------- línea divisoria --------- ---------------------------

Reflejada en el módulo, el principio es el mismo formato de código como sigue:

getattr (nombre del módulo, "función")

Por ejemplo, podemos probar el código siguiente en el módulo de tiempo:

import time
a=getattr(time,'localtime')
c=time.strftime('%Y-%m-%d',a())
print(c)

El código anterior es equivalente a

import time
c=time.strftime('%Y-%m-%d',time.localtime())
print(c)

La longitud del código tienen el mismo aspecto, pero el primero se puede lograr en la interacción hombre-máquina, sin la necesidad de una decisión compleja

--------------------------------------- línea divisoria --------- ---------------------------

Aunque el código anterior para cumplir con los requisitos, pero hay un riesgo, una vez que la cadena de entrada no puede ser encontrado, será el error, por lo que tenemos que utilizar otro método para ser usado en conjunto, es hasattr (), su papel es el de determinar la presencia de un maestro cadena, puede ser invocada, bajo el código si vamos a modificar la segunda línea no cambia la forma

import time
a=getattr(time,'localtime1')
c=time.strftime('%Y-%m-%d',a())
print(c)

El siguiente error se produce
Aquí Insertar imagen Descripción
entonces podemos utilizar juez hasattr también puede diseñar errores del sistema, de la siguiente manera:

import time
if hasattr(time,'localtime1'):
    a=getattr(time,'localtime1')
    c=time.strftime('%Y-%m-%d',a())
    print(c)
else:
    print('代码错误')

Los resultados son los siguientes:
Aquí Insertar imagen Descripción
resumirse como sigue:

1) cuando necesitamos algunos datos interactivos o interactivos, tales como entrada utilizando cadena de entrada leída desde un archivo, o para implementar una llamada al método algunas funciones pueden ser implementadas utilizando el método de reflexión.

2) se puede lograr método de reflexión, a juzgar por la sentencia if también se puede lograr, pero el método más necesidades reflexión es más sencillo

3) Debido a que la reflexión interna se llama y ejecuta el código, por lo que la seguridad será mayor!

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

Supongo que te gusta

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