检查 class 个实例是否可以在不实例化的情况下调用

Check if class instances are callable without instantiating

如何检查给定 class 的实例是否可调用。如果您实例化 class 然后使用 callable(),这很容易做到。但我的问题是如何在不实例化的情况下进行检查。以 Calendar class:

为例
>>> import calendar
>>> callable(calendar.Calendar())
False

我想做同样的事情但没有实例化,即实现一些函数 callable_class_instances() 这样:

>>> import calendar
>>> callable_class_instances(calendar.Calendar)
False
>>> 
>>> class MyFunc:
...     def __init__(self):
...         print('Should not run on callable_class_instances call.')
...     def __call__(self):
...         print('MyFunc instance called.')
>>> callable_class_instances(MyFunc)
True

有什么简单的方法可以做到这一点,而且看起来不像黑客?

来自the docs

Note that classes are callable (calling a class returns a new instance); instances are callable if their class has a __call__() method.

我之前的尝试 (hasattr) 的问题是所有 类 都有一个 __call__ 方法,以便我们可以初始化它们。这应该在大部分时间都有效:

>>> import types

>>> import calendar
>>> isinstance(calendar.Calendar.__call__, types.FunctionType)
False

请注意,这不适用于 non-Python __call__ 实施。