class Adder:
def __call__(self, x, y):
return x + y
add1 = Adder()
def add2(x, y):
return x + y
add1
和add2
除了类型之外还有什么区别?
答案 0 :(得分:4)
在你的超简单例子中。没有实际的区别,因为函数也是可调用的对象。
但是,可调用对象是您编写的类的对象,因此您可以编写此代码:
class Counter:
def __init__(self, value = 0):
self.n = 0
def __call__(self):
self.n += 1
return self.n
def __repr__(self):
return str(self.n)
redWins = Counter()
blueWins = Counter()
if foo():
redWins()
else:
blueWins()
print("Red has won {} times.\nBlue has won {} times."
.format(redWins, blueWins))
你会发现很难仅使用函数来实现这样的类。即使您尝试使用全局变量,也不能拥有单个全局变量的单独实例。
查看更多:Functions, Callable Objects, and how both are created in Python
答案 1 :(得分:3)
在您的示例中,没有功能差异,但由于<div id="mytabs">
<ul class="nav nav-tabs" id="tabs">
<li class="active"><a data-toggle="tab" href="#Personal" aria-expanded="false">Personal</a></li>
<li><a data-toggle="tab" href="#Business">Business</a></li>
<li><a data-toggle="tab" href="#Documents" aria-expanded="true">Documents</a></li>
<li><a data-toggle="tab" href="#References">References</a></li>
<li><a data-toggle="tab" href="#OrderDelivery">Order & Delivery</a></li>
</ul>
</div>
是一个对象,您可以将信息存储在成员中:
add1
您获得class Adder:
def __init__(self):
self.__memory = 0
def __call__(self, x, y):
self.__memory += x
return x+y+self.__memory
add1 = Adder()
print(add1(10,10))
print(add1(10,10))
然后30
。你可以用一个函数做到这一点,但是你需要一个全局变量,并且使用全局变量确实是在寻找麻烦。