Skip to main content
 首页 » 编程设计

python之当完全限定对象类与限定类不同时,isinstance() 返回 false

2025年05月04日18sharpest

当第 3 方库方法使用 isinstance() 将对象与类进行比较时,它返回 False 因为它将对象的完全限定类名与从“更高”开始的合格类名。

例如:isinstance()发现对象类和类名不同:

预期:

'network.mhistory.service.mhistory_messages.MHistoryActivityViewMessage'

发现:

'backend.network.mhistory.service.mhistory_messages.MHistoryActivityViewMessage'

并根据代码片段返回 False:

if not isinstance(value, self.type): 
      raise ValidationError('Expected type %s for field %s, ' 
                            'found %s (type %s)' % 
                            (self.type, name, value, type(value))) 

有没有办法更改类的完全限定名称(至少是暂时的)?

请您参考如下方法:

就 Python 而言,类 network.mhistory.service.mhistory_messages.MHistoryActivityViewMessage 和 backend.network.mhistory.service.mhistory_messages.MHistoryActivityViewMessage 不是相同的。即使它们具有完全相同的定义也是如此,因为它们是从同一个文件中读取的!

您的错误不是 isinstance 返回“错误”答案,而是您可以通过两个不同的名称访问这两个类(也可能还有其他类)。

可能有两个不同的问题导致了这个错误。首先,您可能在某个地方找到了一些与 sys.path 混淆的代码。这本质上并不是坏事,但它通过使 backend 包的内容以两种不同的方式可用,首先是直接(例如 import network)和通过 后端(来自后端导入网络)。你不想要这个。

您的错误的第二部分(可能是导致第一部分的激励因素)是您实际上使用两种方式来访问这些对象。您只需要一个,因此应该修复以错误方式导入包的部分。