Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

820
Vistas
Python decorator in a class: missing required positional arguments:
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):
       ...

So basically I have this class, and I want to call the function "update()" automatically before I call a method from the class. But I get this error:

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

I don't really understand what's wrong here, also I saw some tutorials on the internet where they did something similar and it was working. Can someone explain me what's wrong here and how do I fix it?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

What is a decorator? It's syntactic sugar for more verbose syntax.

@decorator
def my_fun():
   ...

is the same as

my_fun = decorator(my_fun)

So in your specific case

method = add_update(method)

Do you see a problem? Add update expects two parameters (self, and func), but here it gets only one (and actually you pass method as self).

To solve this you need to create decorator outside the class that gets only function, and that functions first parameter will be self:

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

0

when you use @add_update, It is equivalent to add_update(method), At this time add_update is still a function.

You can make the following modifications to make it work

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 Denunciar

0

You have to pass the argument func and define the class inside the decorator function.

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda