gpt4 book ai didi

Python:inspect.ismethod 如何工作?

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

我正在尝试获取我类(class)中所有方法的名称。在测试 inspect 模块如何工作时,我通过 obj = MyClass.__dict__['mymethodname'] 提取了我的方法之一。

但现在 inspect.ismethod(obj) 返回 Falseinspect.isfunction(obj) 返回 True ,我不明白为什么。是否有一些奇怪的方法将方法标记为我不知道的方法?我认为这只是它在类中定义并将 self 作为其第一个参数。

最佳答案

您正在看到 Python 幕后机制的一些效果。

当您编写 f = MyClass.__dict__['mymethodname'] 时,您将获得“mymethodname”的原始实现,这是一个普通函数。要调用它,您需要传入一个额外的参数,类实例。

当您编写 f = MyClass.mymethodname(注意 mymethodname 后没有括号)时,您将获得 MyClass 类的未绑定(bind)方法,它是 MethodType 的一个实例包装您在上面获得的原始函数。要调用它,您需要传入一个额外的参数,类实例。

当您编写 f = MyClass().mymethodname(请注意,我在采用其方法之前创建了 MyClass 类的对象)时,您将获得 MyClass 类实例的绑定(bind)方法。您不需要将额外的类实例传递给它,因为它已经存储在其中。

gnibbler 所述,要通过以字符串形式给出的名称获取包装方法(绑定(bind)或未绑定(bind)),请使用 getattr .例如:

unbound_mth = getattr(MyClass, "mymethodname")

bound_mth = getattr(an_instance_of_MyClass, "mymethodname")

关于Python:inspect.ismethod 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3228680/

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