gpt4 book ai didi

python - 我如何判断一个类是否有方法 `__call__` ?

转载 作者:行者123 更新时间:2023-11-28 21:03:27 26 4
gpt4 key购买 nike

一个非常简单的类不是可调用类型:

>>> class myc:
... pass
...
>>> c=myc()
>>> callable(c)
False

如何判断一个类是否有方法__call__?为什么下面两种方式会得到相反的结果?

>>> myc.__call__
<method-wrapper '__call__' of type object at 0x1104b18>

>>> __call__ in myc.__dict__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name '__call__' is not defined

谢谢。

最佳答案

myc.__call__ 为您提供用于调用 myc 本身的 __call__ 方法,而不是 myc 的实例.这是您执行操作时调用的方法

new_myc_instance = myc()

不是当你这样做

new_myc_instance()

__call__ in myc.__dict__ 给你一个 NameError 因为你忘了在 __call__ 两边加上引号,如果你记得加上引号,它会给你 False 因为 myc.__call__ 不是通过 myc.__dict__ 找到的。它是通过 type(myc).__dict__(又名 type.__dict__,因为 type(myc) 是类型)找到的。


要检查 myc 的实例是否有 __call__ 实现,您可以执行手动 MRO 搜索,但是 collections.abc.Callable已经为您实现了:

issubclass(myc, collections.abc.Callable)

关于python - 我如何判断一个类是否有方法 `__call__` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46456578/

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