如何解决检查项目是否是实例而不是子类
如何检查对象是否是类的实例,但不是其任何子类的实例(不知道子类的名称)? 因此,如果我有以下代码:
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
不要命名变量class
,它是一个关键字,将不起作用,请改用klass
或typ
。另外,变量名object
遮盖了object
中的内部版本,因此请使用类似obj
的名称。
我个人更喜欢.__class__
变体,但更可能是“ pythonic”变体
def instance_but_not_subclass(object,klass):
return type(obj) is klass
因为它不访问任何dunder(__
)属性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。