1

我想知道为什么 jsonpickle-module 在连续应用或调用编码和解码时没有通过 Python 3.8 中的isinstance(...)检查。

假设我有一个简单的类Person

这里有一些代码来说明我的意思:

import jsonpickle


class Person:
    id: int = -1
    name: str = "John Doe"

    def __init__(self, pId: int = None, name: str = None) -> None:
        self.id = (pId, self.id)[pId is None]
        self.name = (name, self.name)[name is None]


testInstance = Person()
testInstanceJSON = jsonpickle.encode(testInstance, unpicklable=True, make_refs=True)
print(testInstanceJSON)
testInstanceObject = jsonpickle.decode(testInstanceJSON)
print(testInstanceObject)
print(isinstance(testInstanceObject, Person.__class__))

它在最后一个打印命令上返回False !

4

1 回答 1

1

对象的属性__class__提供了该对象作为实例的类。

像这样的类Person也是 的对象和实例type

这意味着

isinstance(testInstanceObject, Person.__class__)

是相同的

isinstance(testInstanceObject, type)

但当然testInstanceObject不是type.

将其更改为

isinstance(testInstanceObject, Person)

检查是否testInstanceObjectPerson.

于 2021-09-08T16:45:27.047 回答