python - 检查项目是否是实例但不是子类
问题描述
你如何检查一个对象是否是一个类的实例而不是它的任何子类(不知道子类的名称)?因此,如果我有以下代码:
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
因为issubclass()
,isinstance()
总是回报True
。
解决方案
该object.__class__
属性是对对象确切类的引用,因此您只需将其与您的参数进行比较
def instance_but_not_subclass(obj, klass):
return obj.__class__ is klass
不要命名 variables class
,它是一个关键字,并且不起作用,使用klass
ortyp
代替。此外,变量名称object
会影响构建object
,因此请使用类似obj
.
我个人更喜欢这个.__class__
变体,但更“pythonic”的变体可能是
def instance_but_not_subclass(object, klass):
return type(obj) is klass
因为它不访问任何 dunder ( __
) 属性。
推荐阅读
- python - onedrivesdk 未使用 pip 安装
- amazon-web-services - 如何从 cloudwatch 日志中提取时间值以执行数学运算
- audio - ubuntu 18.04 没有声音
- javascript - 如何使用javascript覆盖ubuntu中的默认cmd快捷键
- java - Joda-time,期间计算问题?
- sage-erp - 如何在 SAGE 中从外部系统创建 IC 内部使用条目?
- angular - 角料表检测滚动
- python-3.x - 尝试在 pycharam 中使用 sys
- javascript - 循环循环 React Material UI Javascript
- java - 从 log4j 迁移到 log4j2 时出错