当对象可能是object()实例时检查类型的正确方法

时间:2016-09-30 10:21:54

标签: python python-3.x types

我正在寻找一种正确的方法来检查一个可能是object()实例的对象类型,现在我正在这样做:

def _default_json_encoder(obj):
    """ Default encoder, encountered must have to_dict
    method to be serialized.  """
    if hasattr(obj, "to_dict"):
        return obj.to_dict()
    else:
        # object() is used in the base code to be evaluated as True
        if type(obj) == type(object()):
            return {}
        raise TypeError(
            'Object of type %s with value of '
            '%s is not JSON serializable'
            % (type(obj), repr(obj))
        )

但是

if type(obj) == type(object()):
    return {}
不幸的是,不推荐

if isinstance(obj, object):
    return {}

将无效,因为所有对象都将被评估为True。

那么type(obj) == type(object())是唯一的方法吗?

1 个答案:

答案 0 :(得分:1)

如果您的数据结构中确实有object()个实例,那么您可以使用:

type(obj) is object

测试直接实例(类通常是单例)。

但是,我重新考虑我的数据结构,并使用另一个原始值(如True),专用单例或专用类。

一个专门的单身人士可能是:

sentinel = object()

然后测试该哨兵:

if obj is sentinel:
    return {}