在Python中,如何使用函数属性作为函数?

在Python中,如何使用函数属性作为函数?,python,function,function-attributes,Python,Function,Function Attributes,在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(sumCount

在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()?也就是说,“看起来”像类方法的函数属性?如何做到这一点?

您可以使用名为
call\u count
的变量,也可以使用名为
call\u 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

函数是第一类对象。它们的工作方式与任何类的实例一样(因为它们是类的实例)。可以为它们指定任何属性,包括其他函数

def计数器(func):
def内部(*args):
内部调用计数+=1
返回函数(*args)
内部调用计数=0
def call_count():
返回内部。\u调用\u计数
internal.call\u count=call\u count
返回内部

您可以在
内部存储函数。调用_count
就像存储整数一样简单-为什么您认为这会是一个问题?我不确定这里的重点是什么,因为你仍然需要在某处存储一个整数,以保持计数。