我有一个名为 Route 的类(带有自己的 __repr__() 函数)和一个名为 default_route 的 Route 实例。但是,如果我调用 isinstance(default_route,Route),它会意外返回 False,即:
[Dbg]>>> default_route
Route(office(235)=323-654-3242)
[Dbg]>>> isinstance(default_route,Route)
False
[Dbg]>>> default_route.__class__
<class 'route.Route'>
[Dbg]>>> Route
<class 'route.Route'>
[Dbg]>>> type(default_route)
<class 'route.Route'>
[Dbg]>>> type(default_route) is Route
False
Run Code Online (Sandbox Code Playgroud)
类定义非常简单和简单:
class Route(object):
def __init__(self, phone, condition=None):
self.phone=phone
self.condition=condition
self.choice_name=None
Run Code Online (Sandbox Code Playgroud)
我只是对此感到困惑;为什么 isinstance() 不会在上面返回 True ?
我无法理解 json.loads() 中的 object_hook 功能实际上是如何工作的。我发现了一个类似的问题object_hook does not address the full json here,但我尝试遵循我从中理解的内容,但它仍然不适合我。我已经了解到 object_hook 函数以某种方式递归调用,但我无法理解如何使用它从 json 字符串构造复杂的对象层次结构。考虑以下 json 字符串、类和 object_hook 函数:
import json
from pprint import pprint
jstr = '{"person":{ "name": "John Doe", "age": "46", \
"address": {"street": "4 Yawkey Way", "city": "Boston", "state": "MA"} } }'
class Address:
def __init__(self, street=None, city=None, state=None):
self.street = street
self.city = city
self.state = state
class Person:
def __init__(self, name=None, age=None, address=None):
self.name = name
self.age = int(age)
self.address = Address(**address)
def …Run Code Online (Sandbox Code Playgroud)