gpt4 book ai didi

python 方法作为参数

转载 作者:太空狗 更新时间:2023-10-29 21:25:03 25 4
gpt4 key购买 nike

所以我知道在 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)

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

这里的方法到底是怎么传递的?我的意思是我收到的输出是“a”,所以我猜当对象方法作为参数传递时,实际对象也是如此吗?在这种情况下,当我传递 a.my_method 时,实例 a 也被传递了吗?

最佳答案

当您访问 a.my_method 时,Python 发现它是类的一个属性并且 A.my_method 有一个方法 __get__() 所以它调用 A.my_method.__get__(a),该方法创建一个新对象(“绑定(bind)方法”),其中包含对 A.my_method 和对 a 本身的引用。当您调用绑定(bind)方法时,它会将调用传递回基础方法。

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

关于python 方法作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7107510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com