Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

825
Views
Decorador de Python en una clase: faltan argumentos posicionales requeridos:
class Something: def __init__(self, ...): ... def update(self): ... def add_update(self, func): def fct(*args, **kwargs): self.update() func(*args, **kwargs) return fct @add_update def method(self, some_parameter): ...

Básicamente, tengo esta clase y quiero llamar a la función "actualizar ()" automáticamente antes de llamar a un método de la clase. Pero me sale este error:

 TypeError: add_update() missing 1 required positional argument: 'func'

Realmente no entiendo qué está mal aquí, también vi algunos tutoriales en Internet donde hicieron algo similar y funcionó. ¿Puede alguien explicarme qué está mal aquí y cómo lo soluciono?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

¿Qué es un decorador? Es azúcar sintáctico para una sintaxis más detallada.

 @decorator def my_fun(): ...

es lo mismo que

 my_fun = decorator(my_fun)

Así que en tu caso específico

 method = add_update(method)

¿Ves un problema? Agregar actualización espera dos parámetros (self y func), pero aquí solo obtiene uno (y en realidad pasa el método como self ).

Para resolver esto, debe crear un decorador fuera de la clase que solo obtenga la función, y el primer parámetro de la función será self:

 def add_update(func): def wrapper(*args): self = args[0] ...
over 4 years ago · Santiago Trujillo Report

0

cuando usa @add_update , es equivalente a add_update(method) , en este momento add_update sigue siendo una función.

Puedes hacer las siguientes modificaciones para que funcione

 class Something: def __init__(self): ... def update(self): ... def add_update(f): def fct(self, *args, **kwargs): self.update() return f(self, *args, **kwargs) return fct @add_update def method(self, some_parameter): ...
over 4 years ago · Santiago Trujillo Report

0

Tienes que pasar el argumento func y definir la clase dentro de la función decoradora.

 class Something: def __init__(self,..): ... def update(self): ... def add_update( func): def fct(*args, **kwargs): args[0].update() #or Something.update() func(*args, **kwargs) return fct @add_update def method(self, some_parameter): ...
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!