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

More Related Content

PPTX
OpenModelica tutorials_6 Tips(超初級チュートリアル6.便利技 Tableモデルの使い方)
ODP
課題 (第三回)
PPTX
Python3のデータクラスについて
PPTX
Python3のデータクラスについて
PDF
ドキュメントなんとかしたい
PPTX
Macで開発環境を整える170420
PDF
Python と型ヒント (Type Hints)
PPTX
Pythonでも型をつけたいだけの人生だった
OpenModelica tutorials_6 Tips(超初級チュートリアル6.便利技 Tableモデルの使い方)
課題 (第三回)
Python3のデータクラスについて
Python3のデータクラスについて
ドキュメントなんとかしたい
Macで開発環境を整える170420
Python と型ヒント (Type Hints)
Pythonでも型をつけたいだけの人生だった

More from Atsushi Hayakawa (20)

PDF
tidyverse.orgの翻訳
PDF
Zepp play soccerで測ってみた
PDF
トライアスロンとgepuro task views V2.0 Japan.R 2018
PPTX
バンクーバー旅行記
PPTX
Analyze The Community Of Tokyo.R
PPTX
Visual Studio CodeでRを使う
PDF
トライアスロンと僕 - Japan.R 2017
PDF
simputatoinで欠損値補完 - Tokyo.R #65
PDF
useR!2017 in Brussels
PPTX
Japan.R 2016の運営
PPTX
Rstudio上でのパッケージインストールを便利にするaddin4githubinstall
PDF
統計的学習の基礎 4.4~
PDF
Splatoon界での壮絶な戦い&Japan.Rの宣伝
PDF
最近のクラウドストレージの事情と私情
PDF
gepuro task views
PDF
nginxのログを非スケーラブルに省メモリな方法で蓄積する
PDF
implyを用いたアクセスログの可視化
PDF
イケてる分析基盤をつくる
PDF
らずぱいラジコン
PDF
らずぱいカー
tidyverse.orgの翻訳
Zepp play soccerで測ってみた
トライアスロンとgepuro task views V2.0 Japan.R 2018
バンクーバー旅行記
Analyze The Community Of Tokyo.R
Visual Studio CodeでRを使う
トライアスロンと僕 - Japan.R 2017
simputatoinで欠損値補完 - Tokyo.R #65
useR!2017 in Brussels
Japan.R 2016の運営
Rstudio上でのパッケージインストールを便利にするaddin4githubinstall
統計的学習の基礎 4.4~
Splatoon界での壮絶な戦い&Japan.Rの宣伝
最近のクラウドストレージの事情と私情
gepuro task views
nginxのログを非スケーラブルに省メモリな方法で蓄積する
implyを用いたアクセスログの可視化
イケてる分析基盤をつくる
らずぱいラジコン
らずぱいカー
Ad

dataclassとtypehintを使ってますか?