Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Upcoming SlideShare
What to Upload to SlideShare
What to Upload to SlideShare
Loading in …3
×
1 of 18

dataclassとtypehintを使ってますか?

1

Share

Download to read offline

dataclassとtypehintを使ってますか?

Related Books

Free with a 30 day trial from Scribd

See all

dataclassとtypehintを使ってますか?

  1. 1. dataclassとtypehint を使ってますか? ビール片手にLT大会 vol.3 (at WeWork日比谷) 1
  2. 2. 自己紹介 2
  3. 3. • BtoBマーケティングプラット フォームのデータ分析、開発をし ています • 最近の勉強テーマ はやかわ あつし @gepuro 3
  4. 4. 著書 • 次は何を書こうかな? 4
  5. 5. typehint 5
  6. 6. マウスを当てると型が表示される コーディングを助ける • 補完でコードを書きやすくなる 6 変数に型をつける def main(hoge: str): print(hoge)
  7. 7. dataclass 7
  8. 8. • dataclassデコレータをつける • クラス変数でフィールドを定義 データを格納するためのクラス 8 Python3.7から使えます import dataclasses @dataclasses.dataclass class FrozenData: hoge: str
  9. 9. __init__を自動で定義 9 class FrozenData: def __init__(self, hoge: str): self.hoge = hoge @dataclasses.dataclass class FrozenData: hoge: str
  10. 10. frozenでイミュータブルに • frozen=Trueとすれば、クラス変 数を処理途中で変更できなくなる • 意図しない変更を防げる 10 @dataclasses.dataclass(frozen=True) class FrozenData: hoge: str
  11. 11. Pythonあるある 11
  12. 12. どんな引数か不明 • Hogeは文字列?数字? • もしかして、辞書型では? 12 def main(hoge): print(hoge)
  13. 13. 辞書型の混沌 • key2は定義済みなのでは? • hogeはkey2以外のキーを持つ? • 辞書型が便利すぎて、全体の見通 しが徐々に悪くなる 13 def main(hoge): hoge["key2"] = 1 return hoge
  14. 14. KeyError頻発 14 辞書型が持つキーが分からない問題 if __name__ == "__main__": hoge = {} print(hoge["key1"])
  15. 15. typehint + dataclass 15
  16. 16. 引数に透明性を 16 import dataclasses @dataclasses.dataclass(frozen=True) class FrozenData: hoge: str def main(frozenData: FrozenData): print(frozenData) if __name__ == "__main__": fronzenData = FrozenData(hoge="hoge") main(fronzenData)
  17. 17. KeyValueErrorの不安なし 17 hogeという変数を持つことが補完で分かる
  18. 18. 引数に辞書型を使うの辞めよう • dataclassで補完しやすい • イミュータブルで綺麗さを保つ • 辞書型のKeyErrorが起きなくなる 18

×