我在Python中有一个函数迭代从dir(obj)返回的属性,我想检查其中包含的任何对象是否是函数,方法,内置函数等。通常你可以使用callable()为此,但我不想包含类。 到目前为止我提出的最好的是:

isinstance(obj, (types.BuiltinFunctionType, types.FunctionType, types.MethodType))

是否有更加面向未来的方法来进行此项检查?

编辑:我错过了之前我说:“通常你可以使用callable(),但我不想取消课程资格。” 其实想取消其参赛资格类。 我想匹配函数,而不是类。

===============>>#1 票数:13 已采纳

检查模块正是您想要的:

inspect.isroutine( obj )

仅供参考,代码是:

def isroutine(object):
    """Return true if the object is any kind of function or method."""
    return (isbuiltin(object)
            or isfunction(object)
            or ismethod(object)
            or ismethoddescriptor(object))

===============>>#2 票数:5

如果要排除可能具有__call__方法的类和其他随机对象,并且仅检查函数和方法,则inspect模块中的这三个函数

inspect.isfunction(obj)
inspect.isbuiltin(obj)
inspect.ismethod(obj)

应该以面向未来的方式做你想做的事。

===============>>#3 票数:2

if hasattr(obj, '__call__'): pass

这也适用于Python的“鸭子打字”理念,因为你并不关心它是什么 ,只要你可以调用它。

值得注意的是, callable()正在从Python中删除,并且在3.0中不存在。

===============>>#4 票数:1

取决于你所说的“课程”:

callable( obj ) and not inspect.isclass( obj )

要么:

callable( obj ) and not isinstance( obj, types.ClassType )

例如,'dict'的结果不同:

>>> callable( dict ) and not inspect.isclass( dict )
False
>>> callable( dict ) and not isinstance( dict, types.ClassType )
True

  ask by Joe Shaw translate from so

未解决问题?本站智能推荐:

1回复

有没有一种方法来获取函数参数的类型?

假设我们有一个函数foo(a, b) ,它是python模块的公共API的一部分。 有什么方法可以查询函数期望的a和b类型吗? 我知道我可以通过inspect模块获取参数的数量及其默认值,但是有没有可用的类型信息?
1回复

Python 3.3.2检查该对象是否为文件类型

我正在从Python 2.7移植到Python 3.3.2。 在Python 2.7中,我曾经能够执行类似assert(type(something) == file) ,但似乎在Python 3.3.2中这是错误的。 我如何在Python 3.3.2中做类似的事情?
1回复

一种检查python中类型的一致方法

我发现python中的类型检查(在py3之前,我不确定py3中的状态)有点混乱,这就是我的意思: 首先,有内置类型(int,str等),以及在“类型”模块中定义的类型,您必须在其中导入类型模块并将其用作前缀。 如果对于所使用的类型遇到“名称未定义错误”,则可以轻松跳过此障碍,并尝试在ty
1回复

如何检查对象是否是str-python类型的列表

说我有以下对象。 我想检查对象是否是某种类型的列表。 如果我想检查d是否是列表而该列表包含字符串,我该怎么做? d应该通过,但c和a应该通过检查。
1回复

如何检查Python中的对象是否具有特定类型?

我显式地检查对象并陷入困境。 以下返回True : 我需要检查对象data_id['CharacteristicLabel']是否为int或float或bool ,所以我想到了这样做,该方法返回False : 正确的方法是什么?
3回复

检查python中的对象是否可以订购?

如何在Python中检查对象是否可订购/可排序? 我正在尝试为我的二叉树类的__init__方法实现基本类型检查,我希望能够检查节点的值是否可订购,如果不是则抛出错误。 它类似于在哈希表的实现中检查哈希性。 我正在尝试完成类似于Haskell (Ord a) => etc.限
4回复

Python:检查对象是否为字符串列表

如何检查对象是否为字符串列表? 我只能检查对象是否为字符串: 所需的输出:
6回复

如何检查我的python对象是否为数字? [重复]

这个问题在这里已有答案: 检查对象是否为数字的最pythonic方法是什么? 12个答案 在Java中,数字类型都来自Number,所以我会使用 什么是python等价物?
1回复

检查对象是否为十进制的正确方法

对于int对象,可以使用cpython中的cimported函数,如下所示: %%cython from decimal import Decimal from cpython cimport PyLong_Check val_decimal = Decimal(1) print(PyLon
2回复

如何检查python类或对象是否是用户定义的(不是内置的)?

我需要检查一个python模块来查找简单数据以及“用户定义的对象”。 这里,我指的是非内置的对象(或函数或类),但是使用class / def语句定义或动态加载/生成。 注意有类似的问题,但他们询问“新风格用户定义的类”。 我见过inspect模块 - 我看不出它有什么用。 我可