Python - Завершение метода вручную (в частности, я прошу про line-profiler Роберта Керна) - PullRequest
0 голосов
/ 07 сентября 2018

Обертывание функции не проблема: Как использовать line_profiler (от Robert Kern)?

from line_profiler import LineProfiler
import random

def do_stuff(numbers):
    s = sum(numbers)
    l = [numbers[i]/43 for i in range(len(numbers))]
    m = ['hello'+str(numbers[i]) for i in range(len(numbers))]

numbers = [random.randint(1,100) for i in range(1000)]
lp = LineProfiler()
lp_wrapper = lp(do_stuff)
lp_wrapper(numbers)
lp.print_stats()

Однако я не могу понять, что он применяет ту же технику к методам.

Допустим, я пытаюсь использовать ту же технику в методе:

class Foo:
    def method(self):
        return 1

obj = Foo()

lp = LineProfiler()
lp_wrapper = lp(method)
obj.lp_wrapper()  # Causes an error since Foo does not have a method called "lp_wrapper"

Как лучше всего исправить эту ошибку? Благодарю.

1 Ответ

0 голосов
/ 08 сентября 2018

Лучший ответ приходит от schwobaseggl: «Вы пробовали lp_wrapper = lp(obj.method)»

Оказывается, именно так вы оборачиваете методы.

...