Я хотел бы написать декоратор, который делает несколько разные вещи, когда получает функцию или метод.например, я хотел бы написать декоратор кеша, но не хочу, чтобы self
был частью ключа, если это метод.
def cached(f):
def _internal(*args, **kwargs):
if ismethod(f):
key = create_key(*args[1:], **kwargs) # ignore self from args
else: # this is a regular function
key = create_key(*args, **kwargs)
return actual_cache_mechanism(key, f, *args, **kwargs)
return _internal
class A:
@cached
def b(self, something):
...
@cached
def c(something):
...
проблема в том, что когда вызывается @cached
, он не может различить методы и функции, поскольку оба имеют тип function
.это вообще можно сделать?Размышляя об этом, я чувствую, что на самом деле методы не имеют представления о контексте, в котором они определяются в ...
Спасибо!