我正在对外部部门进行一些RESTful API调用,并编写了各种函数(类似于下面的代码片段),根据我需要的信息处理这些函数(例如“注册”,“人员”等。 )。现在我想知道将它放入类中是否会更加pythonic,我认为这样可以更容易地进行处理,例如“has_a_passing_grade”等,并将其作为属性或其他内容传递出去当类被实例化时。
有没有一种标准的方法可以做到这一点?它是否像创建类一样简单,以某种方式构建api_url,就像我在下面所做的那样,调用api,解析和格式化数据,构建一个dict或者要返回的东西,然后完成?那个班级的召唤怎么样呢?有没有人有一些类似的可以共享的示例代码?
先谢谢你的帮助!
from django.utils import simplejson
try:
api_url = get_api_url(request, 'enrollment', person_id)
enrollment = call_rest_stop(key, secret, 'GET', api_url)
enrollment_raw = enrollment.read()
if enrollment_raw == '' or None:
return 'error encountered', ''
enrollment_recs = simplejson.loads(enrollment_raw)
# now put it in a dict
for enrollment in enrollment_recs:
coursework_dict = {
'enrollment_id': enrollment['id'],
...,
}
coursework_list.append(coursework_dict)
cola_enrollment.close()
except Exception, exception:
return 'Error: ' + str(exception), ''
答案 0 :(得分:0)
因此,假设您希望API的用户像这样调用您的API:
student_history, error_message = get_student_history(student_id)
然后你可以将上面的内容包装在那个函数中:
from django.utils import simplejson
def get_student_history(person_id)
try:
api_url = get_api_url(request, 'enrollment', person_id)
enrollment = call_rest_stop(key, secret, 'GET', api_url)
enrollment_raw = enrollment.read()
if enrollment_raw == '' or None:
return [], 'Got empty enrollment response'
enrollment_recs = simplejson.loads(enrollment_raw)
# now put it in a dict
for enrollment in enrollment_recs:
coursework_dict = {
'enrollment_id': enrollment['id'],
...,
}
coursework_list.append(coursework_dict)
cola_enrollment.close()
return coursework_list, None
except Exception as e:
return [], str(exception)
您也可以使用一个类,但请记住,只有在使用API的方法可以从中获益的情况下才应该这样做。例如:
class EnrollmentFetcher(object):
def __init__(person_id):
self.person_id = person_id
def fetch_data(self):
self.coursework_list, self.error_message = get_student_history(self.person_id)
def has_coursework(self):
return len(self.coursework_list) > 0
fetcher = EnrollmentFetcher(student_id)
fetcher.fetch_data()
if fetcher.has_coursework():
# Do something
面向对象编程既不是好的也不是坏的。如果在任何特定情况下满足您的需求,您应该选择使用它。在这种情况下,它可以帮助澄清您的代码(例如,has_coursework比检查列表是否为空更清楚),但它可能正好相反。
附注:注意捕获如此广泛的异常。如果它是OutOfMemory错误,你是否真的可以继续,例如?