python方法作为参数

Bog*_*dan 7 python

所以我在python中知道一切都是'对象',这意味着它可以作为参数传递给方法.但我试图了解这是如何工作的.所以我尝试了以下示例:

class A:

    def __init__(self):
        self.value = 'a'

    def my_method(self)
        print self.value

class B:

   def __init__(self):
       self.values = 'b'

   def my_method(self, method):
       method()

a = A()
b = B()
b.my_method(a.my_method)
Run Code Online (Sandbox Code Playgroud)

现在首先写这篇文章只是为了看看事情是如何运作的.我知道我应该检查一下my_method这个参数是否可以调用.现在我的问题是:

这个方法到底是怎么回事?我的意思是我收到的输出是'a'所以我猜测当一个对象方法作为参数传递时,实际对象是什么?在这种情况下我传递a.my_method的实例a也通过了吗?

Dun*_*can 8

当你访问a.my_methodPython时,看到它是类的一个属性,并且A.my_method有一个方法,__get__()所以它调用A.my_method.__get__(a),该方法创建一个新对象('绑定方法'),它包含A.my_methoda自身的引用和引用.当您调用绑定方法时,它会将调用传递回底层方法.

每次调用任何方法时都会发生这种情况,无论是直接调用还是在代码中,都会将实际调用延迟到以后.您可以在http://docs.python.org/reference/datamodel.html#descriptors中找到有关描述符协议的更多描述.