pythonは型ヒントを無視するのでこうなるしかないんですけど どうしてもオーバーロードするなら自分で型を判定する ていうかUnion型があるってことはもともとそういうものってことかな class Point: def __init__(self, x: Union[Tuple[float, float], float] = 0.0, y: float=0.0) -> None: if isinstance(x, tuple): self.x = x[0] self.y = x[1] else: self.x = x self.y = y mypyは通った 動かす $ python3 -i shape.py >>> Point() Point(0.0, 0.0) >>> Point(1.0,2.0) Point(1.0, 2.0) >>> Point((2.0,4.0)) Point(2.
いつものやつです。対応していない値をjson.dumps()に与えるとTypeErrorが発生するやつです。 TypeError 例えばこういうdataclassを定義して。 from dataclasses import dataclass, asdict @dataclass class Point: x: int y: int json.dumpsするとTypeError import json p = Point(x=1, y=2) # TypeError: Object of type Point is not JSON serializable print(json.dumps(p)) default いつもどおりにdefaultを渡してあげる必要があります。ちょっとめんどくさいですが、is_dataclassという関数で調べられるのでどうにかなります。 import json
jsonのencodeエラーについては昔に書いたこの辺を見てもらうとして。 pythonでjson出力する際で対応していない型(e.g. datetime)の値を変換しながら出力したい - Qiita 今回の主題は、json.dumpsに渡すdefaultの関数としてfunctools.singledispatchが有用かもという話。 使いかた singledispatchを利用したモジュールを定義 例えば以下のようなextjsonモジュールを定義してあげる。 extjson.py import json from functools import ( singledispatch, partial, ) @singledispatch def encode(o): raise TypeError("Object of type '%s' is not JSON serializable"
今日は Single-dispatch generic functions (PEP-443)。Generic functionは汎用関数と訳されることも多いが、言語によって微妙に違う使われ方をしている。Pythonでは「引数の型によって動作が異なる複数の関数に同じ名前をつける」という意味合いで使われているようだ。 と書いてもさっぱりわからないので、例示。引数の型によって出力が異なる関数を考える。Generic functionsを使わないとこんな感じ。 def print_func(arg): arg_type = type(arg) if arg_type is int: print("found integer:", arg) elif arg_type is list: print("found list:", arg) else: print("found something:"
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く