检查一个项目是否是一个实例而不是一个子类
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
,它是一个关键字,不会起作用,请改用 klass
或 typ
。此外,变量名称 object
会影响 object
中的构建,因此请使用类似 obj
.
的内容
我个人更喜欢 .__class__
变体,但更“pythonic”的变体可能是
def instance_but_not_subclass(object, klass):
return type(obj) is klass
因为它不访问任何 dunder (__
) 属性。
如何检查一个对象是否是 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
,它是一个关键字,不会起作用,请改用 klass
或 typ
。此外,变量名称 object
会影响 object
中的构建,因此请使用类似 obj
.
我个人更喜欢 .__class__
变体,但更“pythonic”的变体可能是
def instance_but_not_subclass(object, klass):
return type(obj) is klass
因为它不访问任何 dunder (__
) 属性。