Saltar al contenido

¿Qué hace el símbolo “arroba” (@) en Python?

Solución:

Ejemplo

class Pizza(object):
    def __init__(self):
        self.toppings = []

    def __call__(self, topping):
        # When using '@instance_of_pizza' before a function definition
        # the function gets passed onto 'topping'.
        self.toppings.append(topping())

    def __repr__(self):
        return str(self.toppings)

pizza = Pizza()

@pizza
def cheese():
    return 'cheese'
@pizza
def sauce():
    return 'sauce'

print pizza
# ['cheese', 'sauce']

Esto muestra que el function/method/class estás definiendo después de un decorador se transmite básicamente como un argument al function/method inmediatamente después de la @ firmar.

Primer avistamiento

El microframework Matraz introduce decoradores desde el principio en el siguiente formato:

from flask import Flask
app = Flask(__name__)

@app.route("https://foroayuda.es/")
def hello():
    return "Hello World!"

Esto a su vez se traduce en:

rule      = "https://foroayuda.es/"
view_func = hello
# They go as arguments here in 'flask/app.py'
def add_url_rule(self, rule, endpoint=None, view_func=None, **options):
    pass

Darme cuenta de esto finalmente me permitió sentirme en paz con Flask.

Un @ El símbolo al principio de una línea se usa para clase, función y método. decoradores.

Leer más aquí:

PEP 318: Decoradores

Decoradores de Python

Los decoradores de Python más comunes con los que te encontrarás son:

@propiedad

@classmethod

@staticmethod

Si ves un @ en el medio de una línea, eso es algo diferente, multiplicación de matrices. Vea esta respuesta que muestra el uso de @ como operador binario.

Este fragmento de código:

def decorator(func):
   return func

@decorator
def some_func():
    pass

Es equivalente a este código:

def decorator(func):
    return func

def some_func():
    pass

some_func = decorator(some_func)

En la definición de un decorador, puede agregar algunas cosas modificadas que no serían devueltas por una función normalmente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *