假设我有两个restapi端点(http://example.com/task
,http://example.com/employee
)和以下两个类:
class Employee(object):
def __init__(self, **kwargs):
self.ID = kwargs['ID']
self.first_name = kwargs['first_name'] if 'first_name' in kwargs else None
self.last_name = kwargs['last_name'] if 'last_name' in kwargs else None
class Task(object):
def __init__(self, **kwargs):
self.ID = kwargs['ID']
self.start_date = kwargs['start_date']
self.employee = Employee(ID=kwargs['employee_id'])
现在我想从restapi返回的json创建Python对象。在
假设GET to http://example.com/task/19
返回以下json:
现在,下面所有的工作
print(task.ID) # 19
print(task.start_date) # 2018-04-23
print(task.employee.ID) # xyz1223
但是print(task.employee.first_name)
返回None
。我希望的是,在幕后发送一个对http://example.com/employee/xyz1223
的GET请求,解析得到的json,并填充属性first_name
和{
最像Python的方式是什么?在
我会让
__init__
方法尽可能简单和愚蠢, 这意味着noI/O。这项工作被推迟到名为from_api
的类方法,该方法只将请求的ID作为参数,然后构建适当的URI,解析输出,并将必要的数据传递给 对__init__
的调用。在Employee.from_api
仍然非常简单,但是Task.from_api
是通过调用Employee.from_api
来实现“join”的,参数取自解析的任务JSON数据。在这样的设计非常适合Python3.7即将发布的data classes
^{pr2}$相关问题 更多 >
编程相关推荐