¿Cuál es el propósito de un objeto invocable? ¿Qué problemas resuelven?¿Por qué tenemos objetos invocables en python?
Respuesta
Toman parámetros y devuelven un resultado según esos parámetros.
A callable es simplemente una forma abstracta de una función resp una interfaz que define que un objeto actúa como una función (es decir, acepta parámetros).
Como las funciones son objetos de primera clase, es obvio que las funciones son objetos invocables. Si está hablando sobre el método __call__
, este es solo uno de los muchos métodos especiales con los que puede sobrecargar el comportamiento de los objetos personalizados, p. para operaciones aritméticas o también definir qué pasa si llama al un objeto.
Una idea para usar es tener algún tipo de objeto de fábrica que a su vez crea otros objetos.
1: ver pregunta relacionada: http://stackoverflow.com/questions/111234/ what-is-a-llama-en-python – rmk
Hay muchos tipos de objetos son exigibles en Python, y que puede servir para muchos propósitos:
- funciones son exigibles, y pueden llevar a lo largo de un "cierre" de una función externa
- clases son exigibles, y llamar a una clase en la que obtiene una instancia de esa clase
- métodos son exigibles, por el comportamiento de funciones como perteneciente a una instancia específica
- staticmethods y classmethods son exigibles, para la funcionalidad método similar cuando el funcionalidad se refiere a "toda una clase" en algún sentido (utilidad staticmethods' es dudosa, ya que un classmethod podría hacer igual de bien ;-)
- generadores son exigibles, y llamar a un generador que obtiene un objeto iterador
- finalmente, y esto puede ser específicamente por lo que estaba preguntando (sin darse cuenta de que todos los anteriores también son objetos ... !!!), puede codificar una clase cuyas instancias son invocables: esto es a menudo el más simple forma de tener llamadas que actualicen el estado de una instancia, así como depender de él (aunque una función con un cierre adecuado, y un método enlazado, ofrezca alternativas, una instancia invocable es la que ay para ir cuando necesite realizar llamadas y alguna otra operación específica en el mismo objeto: para el ejemplo , un objeto que desea llamar pero también aplicar indexación para tener mejor sea una instancia de una clase eso es tanto invocable como indexable ;-).
Una gran variedad de ejemplos del tipo de "problemas que resuelven" es ofrecida por la biblioteca estándar de Python, que tiene muchos casos de cada uno de los tipos específicos que menciono arriba.
Existen áreas, especialmente en las funciones de funciones de llamada de las funciones, donde los objetos permiten menos anidamiento.
Considere hacer un decorador clásico que verifique un nivel de autorización antes de llamar a una función.El uso es claro:
@check_authorization(level="Manager")
def update_price(Item, new_price):...
usted puede hacer esto funciona como anidados:
def check_authorization(level):
def take_params(function):
def concrete(*args, **kwargs):
if user_level_greater_than(level):
return function(*args,
**kwargs)
return None
return concrete
return take_params
o usted podría a esto como una clase, lo que podría ser más claro:
class check_authorization(object):
def __init__(level):
self.level = level
def __call__(function):
self.function = function
return self.dec
def dec(self, *args, **kwargs):
if user_level_greater_than(self.level):
return self.function(*args,v**kwargs)
return None
Muchos encuentra este método plano más claro. Por supuesto, creo en la trampa, porque me gustan las firmas y los metadatos correctos:
from dectools.dectools import make_call_if
@make_call_if
def check_authorization(function, arg, kwargs, level):
return user_level_greater_than(level)
El objeto exigible es una herramienta que es bueno para algunas aplicaciones conocidas y también puede ser bueno para el extraño problema de la vida real depare tú.
- 1. javascript "objetos invocables polimórficos"
- 2. ¿Por qué tenemos cierres en JavaScript?
- 3. ¿Por qué tenemos que ir a JQuery?
- 4. ¿Por qué tenemos punteros distintos de vacío?
- 5. ¿Por qué método equals() cuando tenemos == operador?
- 6. Extensiones de Python C: ¿por qué las funciones C invocables toman argumentos y devuelven PyObject *
- 7. ¿Por qué tenemos que establecer __block variable en nil?
- 8. ¿Por qué algunos atributos invocables no están listados por la función dir()?
- 9. ¿Por qué tenemos líneas nuevas en JavaScript miniaturizado?
- 10. ¿Por qué no tenemos un // comentario en CSS?
- 11. ¿Por qué no tenemos <cstdfloat> en C++?
- 12. ¿Por qué razón tenemos la convención de nomenclatura de lower_case_with_underscores?
- 13. ¿por qué los objetos dict son inalterables en python?
- 14. ¿Por qué tenemos una matriz dentada y una matriz multidimensional?
- 15. ¿por qué tenemos que calcular el tiempo del año 1970?
- 16. ¿Por qué deberíamos usar ui codificado cuando tenemos Specflow?
- 17. ¿Por qué utilizar malloc/free, cuando tenemos new/delete?
- 18. ¿Por qué tenemos que llamar a UpdateWindow después de ShowWindow?
- 19. ¿Por qué Python no está completamente orientado a objetos?
- 20. ¿Cuándo se llama al método call() en un ejecutante Java utilizando objetos invocables?
- 21. Cómo manejar objetos desechables que no tenemos una referencia a?
- 22. serialización Python - ¿Por qué pickle?
- 23. Cuando tenemos clases de envoltorios, ¿por qué las primitivas son compatibles?
- 24. ¿Qué se entiende por clases en sí mismas son objetos?
- 25. ¿Tenemos cierres en C++?
- 26. Entender objetos en Python
- 27. ¿Tenemos transacciones en MS-Access?
- 28. ¿Por qué Python no puede encontrar objetos compartidos que estén en directorios en sys.path?
- 29. ¿Cuál es la nueva forma de comprobar los métodos "invocables" en python 3.x?
- 30. ¿Por qué tenemos que definir la sección .data y .text en el ensamblaje?
http://en.wikipedia.org/wiki/Function_object –
http://en.wikipedia.org/wiki/Functional_programming –