Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

dataclassとtypehintを使ってますか?

134 Aufrufe

Veröffentlicht am

dataclassとtypehintを使ってますか?

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

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

×