Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

826
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda