Вот мой код, который я попробовал:
class Request(object):
def __init__(self, method, path):
self.method = method.upper()
self.path = path
self.h = {
"Content-Type": "application/json;charset=UTF-8",
"Accept-Language": "en-US"
}
def __call__(self, f):
def wrapper(obj, *args, **kwargs):
payload = f(obj, *args, **kwargs)
URL = "{}{}".format(obj.host, self.path)
if payload is not None:
try:
res = requests.request(self.method,
url=URL,
headers=self.h,
data=json.dumps(payload),
timeout=3)
except requests.RequestException as e:
print(e)
return
else:
try:
res = requests.request(self.method,
url=URL,
headers=self.h,
timeout=3)
except requests.RequestException as e:
print(e)
return
return res
return wrapper
class MyClass(object):
def __init__(self, host):
self.host = host
@Request(method="get", path="/status")
def status(self):
pass
@Request(method="put", path="/status")
def status(self, set_state):
body = {
"state_id": set_state
}
return body
Есть некоторые вопросы, которые я не знаю:
В MyClass
, есть две функции, которые я хочу перегрузка с тем же именем и с разными аргументами.
И я хочу использовать разные аргументы для декоратора с этими функциями (@Request (method = " put или post ", путь = "/ status"))
Я знаю, что моя перегрузка функции неправильная, если я попробую так:
@Request(method="<how can i change this with different args>", path="/status")
def status(self, set_state=None):
if set_state is not None
body = {
"state_id": set_state
}
return body
Как я могу установить различные аргументы для декоратора по значению аргументы из функции?