重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
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"
}
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注創新互聯行業資訊頻道,感謝您對創新互聯的支持。