Python A.fun和A()fun有什么区别?

Python A.fun和A()fun有什么区别?,python,Python,我遇到了这段代码,无法理解这两个对象之间的区别。请在交互式解释器中尝试上面的代码: class A(object): def fun(self): pass ins_a = A.fun ins_b = A().fun >>A类(对象): ... def fun(自我): ... 通过 ... >>>真有趣 >>>ins_b=A()。乐趣 >>>因苏阿 >>>因苏布 如您所见,这是绑定/未绑定方法的问题。绑定方法是与对象“绑定”的方法。

我遇到了这段代码,无法理解这两个对象之间的区别。

请在交互式解释器中尝试上面的代码:

class A(object):
    def fun(self):
        pass
ins_a = A.fun
ins_b = A().fun
>>A类(对象):
...     def fun(自我):
...             通过
... 
>>>真有趣
>>>ins_b=A()。乐趣
>>>因苏阿
>>>因苏布

如您所见,这是绑定/未绑定方法的问题。绑定方法是与对象“绑定”的方法。您可以进行更全面的解释。

最大的区别是,如果您尝试调用以下方法: 如果我们添加一个
打印“hello world”
,它将使其更加明显

>>> class A(object):
...     def fun(self):
...             pass
... 
>>> ins_a = A.fun
>>> ins_b = A().fun
>>> ins_a
<unbound method A.fun>
>>> ins_b
<bound method A.fun of <__main__.A object at 0x7f694866a6d0>>
现在,请尝试同时调用:

class A(object):
    def fun(self):
        print ("hello world")

ins_a = A.fun
ins_b = A().fun

()
创建一个实例并在其上调用
乐趣
,另一个直接在类上调用它可能的重复项解释绑定和未绑定之间的区别可能很好。我只是想在发布评论时为这个主题找到一个完美的解释。希望对OP有所帮助:)
In [10]: ins_a()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-10-52906495cc43> in <module>()
----> 1 ins_a()

TypeError: unbound method fun() must be called with A instance as first argument (got nothing instead)

In [11]: ins_b()
hello world
In [2]: type(ins_a)
Out[2]: builtins.function

In [3]: type(ins_b)
Out[3]: builtins.method