gpt4 book ai didi

python - 测试 python 实例方法是否与类提供的功能相同

转载 作者:太空狗 更新时间:2023-10-30 02:55:49 26 4
gpt4 key购买 nike

我有一个指向特定类实例方法的变量。假设有一个名为 Client 的类实现了 get 方法。为 Client 创建一个名为 client 的实例,并为变量 get_func 分配客户端的 get

例如,假设我有以下简化代码:

class Client:
def get(self):
print("This is the get function!")

client = Client()
get_func = client.get

我对 get_func 及其使用方式几乎没有实际控制权,我无法更改它。

我现在想确保 get_funcClient.get

简单的测试 get_func == Client.get 不起作用,因为 get_func 是特定 Client 实例的绑定(bind)方法。我也无法直接获取 client 实例(但是获取绑定(bind)方法的 self 的方法是一个有效的选项,如果我知道该怎么做的话)

最佳答案

Client.get 是一个函数对象(Python 3),或者是一个未绑定(bind)方法(Python 2)。另一方面,Client().get 是一个绑定(bind)方法。方法是函数对象的包装器,记录它们绑定(bind)到的实例(如果有实例)作为 self 参数传入。查看Python descriptor How-to关于 Python 如何从函数生成方法。

您可以解包绑定(bind)方法和未绑定(bind)方法以获取它们包装的底层函数对象,并使用 __func__ 属性对其进行测试:

get_func.__func__ is Client.get   # Python 3
get_func.__func__ is Client.get.__func__ # Python 2, unwrap the unbound method

如果您需要使您的代码与 Python 2 3 兼容,您可以创建一个简单的辅助函数:

def unwrap_method(f):
return getattr(f, '__func__', f)

并使用它:

unwrap_method(get_func) is unwrap_method(Client.get)

关于python - 测试 python 实例方法是否与类提供的功能相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41448264/

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