У меня есть базовый класс с @classmethod
, который действует как декоратор для большого количества методов во многих классах-потомках.
class BaseClass():
@classmethod
def some_decorator(cls, method):
@wraps(method)
def inner_method(self, *args, **kwargs):
# do stuff
return method(self, *args, **kwargs)
return inner_method
class ChildClass(BaseClass):
@BaseClass.some_decorator
def some_child_method(self):
# do other stuff
return
Когда я профилирую этот код и смотрю на него в виде дерева, я вижу тысячи вызовов some_decorator
из сотен разных мест.
А потом я вижу, как some_decorator
перезванивают из сотен мест, откуда он только что поступил.
Это довольно раздражает, и мне еще предстоит найти способ обойти это, ни изменить код, ни профилировать по-другому. (Используя gprof2dot atm: Как вы можете получить дерево вызовов с профилировщиками Python?)
Мысли?