检查项是否是实例而不是子类



如何检查对象是否是类的实例,而不是它的任何子类(不知道子类的名称(?所以如果我有以下代码:

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空间中的哪些内容将产生输出?:

True
False
...
False

因为CCD_ 2和CCD_ 3总是返回CCD_。

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

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

不要将变量命名为class,这是一个关键字,不起作用,请使用klasstyp。此外,变量名object会遮蔽object中的构建,因此请使用类似obj的内容。


我个人更喜欢.__class__变体;蟒蛇;变体可能是

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

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

最新更新