→ alibuda174: b是個MyDateTime物件,json看不懂,所以錯誤 10/07 10:23
→ alibuda174: print json.dumps(str(b))可執行,但是你要的嗎? 10/07 10:24
(題外話, 硬要定義一個 to_s 感覺很像 Ruby 轉 Python 但習慣轉不過來...)
Python 的 JSON serialization 沒有用到任何 magic methods
它是用 introspection 實作的, 而且預設不認得 datetime object
因為 JSON 沒有表示日期的語法 (雖然習慣上是用 ISO 8601, 但那只是習慣)
所以如果你想要讓 Python 認得它, 就要自己擴充預設的 JSON encoder
class CustomEncoder(json.JSONEncoder):
def default(self, obj):
# 如果是 datetime, 把它轉成 str
if isinstance(obj, datetime.datetime):
return str(obj)
# 否則沿用預設設定 (會 raise exception)
return super(CustomEncoder, self).default(obj)
然後把 __repr__ 改成這樣
def __repr__(self):
return CustomEncoder().encode(self)
--
→ GNUGCC:void main(void) 的寫法是可行的唷^^08/10 00:59
→ GNUGCC:雖然這個寫法較傳統,但是語法與文法都正確哦^^08/10 02:16
→ GNUGCC:目前我使用的 Visual C++ 都接受 void main(void) 與 08/10 20:18
→ GNUGCC:int main(void),各位可以把 C++ 專案改成原生 C++ 類型來 08/10 20:19
→ GNUGCC:用 void main(void) 來寫發現也可通過編譯. 08/10 20:21
→ GNUGCC:這個就是 Visual C++ 的彈性.08/11 20:23
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.94.57
※ 文章網址: http://www.ptt.cc/bbs/Python/M.1412651443.A.AAC.html
推 ireullin: 謝謝您的回答,我再試試看 10/07 15:04
→ ireullin: to_s確實是從ruby來的,用起來總是比str()習慣XD 10/07 15:06
→ uranusjr: 如果是這樣的話我推薦你這個 @property decorator 10/07 15:21
→ uranusjr: 加上去之後你連括弧都不用寫了整個都和 Ruby 一樣呢 10/07 15:22
→ uranusjr: 說正經的, 還是推薦入境隨俗一下啦, 這樣以後也更好維護 10/07 15:23
→ hcmlinj: 好奇問一下怎會想從ruby跳過來?XD 10/08 00:14
推 ireullin: 主要是維護之前人寫的扣,個人是比較習慣ruby 01/09 18:30