当第 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)和通过 后端(来自后端导入网络)。你不想要这个。
您的错误的第二部分(可能是导致第一部分的激励因素)是您实际上使用两种方式来访问这些对象。您只需要一个,因此应该修复以错误方式导入包的部分。
