jsonpickle returns 检查实例时为假
jsonpickle returns False on check instance
我想知道为什么 jsonpickle-module 在连续应用或调用 encode & decode 时没有通过 isinstance(...)签入 Python 3.8.
假设我有一个简单的 class 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__))
It returns False 最后一个打印命令!
对象的属性 __class__
提供了 class 该对象是其实例。
类 和 Person
一样也是 type
.
的对象和实例
这意味着
isinstance(testInstanceObject, Person.__class__)
与
相同
isinstance(testInstanceObject, type)
当然 testInstanceObject
不是 type
的实例。
改为
isinstance(testInstanceObject, Person)
检查 testInstanceObject
是否是 Person
的实例。
我想知道为什么 jsonpickle-module 在连续应用或调用 encode & decode 时没有通过 isinstance(...)签入 Python 3.8.
假设我有一个简单的 class 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__))
It returns False 最后一个打印命令!
对象的属性 __class__
提供了 class 该对象是其实例。
类 和 Person
一样也是 type
.
这意味着
isinstance(testInstanceObject, Person.__class__)
与
相同isinstance(testInstanceObject, type)
当然 testInstanceObject
不是 type
的实例。
改为
isinstance(testInstanceObject, Person)
检查 testInstanceObject
是否是 Person
的实例。