十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
Python中怎么对齐打印对象属性,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
目前创新互联公司已为上千家的企业提供了网站建设、域名、网站空间、网站托管维护、企业网站设计、龙城网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
对齐打印对象属性
print 输出对象 dict 全挤在一行,很难看。因此希望输出类似 json 对齐的方式。
基本的思想是转成 json 格式再输出。随便一搜,找到如下代码,普通情况下可用:
def obj_to_json(): stu = Student(28, 'male', '13000000000', '123@qq.com') print(type(stu)) #print(stu) stu = stu.__dict__ # 将对象转成dict字典 print(type(stu)) # print(stu) j = json.dumps(obj=stu, indent=4) print(j)
但有些对象中会包含一些特殊属性,如另外一个对象,则用此法会报错:
TypeError: Object of type xxx is not JSON serializable
其实就是 JSON 不支持这种对象。我们可以自定义处理特殊对象的方法,完整代码如下:
# encoding:utf-8 # author: over import json from datetime import datetime, date class Student(object): def __init__(self, age, sex, mobile, date): self.age = age self.sex = sex self.mobile = mobile self.date = date # 扩展 json 无法解析的类型 class ComplexEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, datetime): # return obj.strftime('%Y-%m-%d %H:%M:%S') return str(obj) elif isinstance(obj, date): # return obj.strftime('%Y-%m-%d') return str(obj) else: try: return json.JSONEncoder.default(self, obj) except Exception as e: print('type not support: '+str(obj)) # 默认的处理不了直接强转字符串 return str(obj) # json 对齐方式输出对象所有属性,方便查看 def printJson(obj): if hasattr(obj,'__dict__'): obj = obj.__dict__ # ensure_ascii=False 中文不变成百分符 # indent 缩进行增加的空格数 j = json.dumps(obj, cls=ComplexEncoder, ensure_ascii=False, indent=4) print(j) if __name__ == '__main__': stu = Student(28, 'male', '13000000000', datetime.now()) printJson(stu)
输出:
{
"age": 28,
"sex": "male",
"mobile": "13000000000",
"date": "2019-07-07 14:43:51.466416"
}
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。