Декораторами обычно являются функции, которые принимают в качестве аргумента вторую функцию, а затем определяют и возвращают третью функцию, которая вызывает вторую функцию при изменении ее входа и / или выхода. Похоже, вы справляетесь с этим лучше, чем я, как новичок.
def decorator(func):
def inner(*args, **kwargs):
# Do stuff here...
value = func(*args, **kwargs)
# ...or here.
return value
return inner
Единственное изменение, которое я бы порекомендовал вашему декоратору, это не вызывать inner
и возвращать результат, а возвращать сама функция. Когда вы сделаете это изменение, вам придется вызывать функцию, которую вы возвращаете сейчас, после того, как она будет возвращена.
def get_component_info(self, func):
def inner():
# ...
return inner
def get_firewall_info_caller(self):
# You will now want to call the `inner` function after you get
# it from `get_component_info`.
get_firewall_info = self.get_component_info(...)()
Похоже, суть вашей ошибки в том, что вы не предоставляете функцию для get_component_info
; вы предоставляете результат вызова этой функции. Я думаю, что изменение кода, чтобы не вызывать get_firewall_info
, должно исправить ваш код.
def get_firewall_info_caller(self):
# You don't want to call the function you're providing to a
# decorator, since it's expecting the function not the result.
get_firewall_info = self.get_component_info(self.get_firewall_info)()