0

在 Python 中,您可以定义一个函数属性“call_count”,这样:

def counter(func):
    def inner(*args):
        inner.call_count+= 1
        return func(*args)

    inner.call_count= 0
    return inner

def sum(a, b, c):
    return a+b+c

sumCounter= counter(sum)

print(sumCounter(1,2,3))
print(sumCounter.call_count)

print(sumCounter(3,2,2))
print(sumCounter.call_count)

这打印:

6
1
7
2

如果我不想调用 sumCounter.call_count,而是想调用函数属性 sumCounter.call_count(),该怎么办?也就是说,一个“看起来”像类方法的函数属性?怎么可能做到这一点?

4

2 回答 2

0

您可以拥有一个名为 的变量call_count或一个名为 的函数call_count,但不能同时拥有这两者。无论哪种情况,您需要一些变量。

def counter(func):
    def inner(*args):
        inner._call_count+= 1
        return func(*args)

    inner._call_count= 0
    inner.call_count = lambda: _call_count
    return inner
于 2020-11-01T04:49:46.943 回答
0

函数是第一类对象。它们就像任何类的实例一样工作(因为它们是类的实例)。您可以为它们分配任何属性,包括其他功能。

def counter(func):
    def inner(*args):
        inner._call_count+= 1
        return func(*args)
    
    inner._call_count= 0
    def call_count():
        return inner._call_count
    inner.call_count = call_count
    return inner

于 2020-11-01T04:56:13.620 回答