所以我在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
也通过了吗?
当你访问a.my_method
Python时,看到它是类的一个属性,并且A.my_method
有一个方法,__get__()
所以它调用A.my_method.__get__(a)
,该方法创建一个新对象('绑定方法'),它包含A.my_method
对a
自身的引用和引用.当您调用绑定方法时,它会将调用传递回底层方法.
每次调用任何方法时都会发生这种情况,无论是直接调用还是在代码中,都会将实际调用延迟到以后.您可以在http://docs.python.org/reference/datamodel.html#descriptors中找到有关描述符协议的更多描述.
归档时间: |
|
查看次数: |
259 次 |
最近记录: |