检查一个项目是否是一个实例而不是一个子类

Check if an item is an instance but not a subclass

如何检查一个对象是否是 class 的实例而不是其子class 的实例(不知道子class 的名称)? 所以如果我有以下代码:

def instance_but_not_subclass(object, class):
    #code
    return result

class item(object):
    
class item_2(item):

...

class item_n(item): 

a = item()
b = item_2()
...
c = item_n()

instance_but_not_subclass(a, item)
instance_but_not_subclass(b, item)
...
instance_but_not_subclass(c, item)

#code space 中会产生什么输出?:

True
False
...
False

因为 issubclass()isinstance() 总是 return True.

object.__class__ 属性是对对象的确切 class 的引用,因此您只需将其与您的参数进行比较

def instance_but_not_subclass(obj, klass):
    return obj.__class__ is klass

不要命名变量 class,它是一个关键字,不会起作用,请改用 klasstyp。此外,变量名称 object 会影响 object 中的构建,因此请使用类似 obj.

的内容

我个人更喜欢 .__class__ 变体,但更“pythonic”的变体可能是

def instance_but_not_subclass(object, klass):
    return type(obj) is klass

因为它不访问任何 dunder (__) 属性。