Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
dataclassを使うと幸せになれる / dataclass
Search
Mizuki Kobayashi
September 16, 2019
Programming
260
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
dataclassを使うと幸せになれる / dataclass
dataclassを使って、(型ヒントを書いて)、書く側も見る側も幸せな世界を目指しましょう。
Mizuki Kobayashi
September 16, 2019
Other Decks in Programming
See All in Programming
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
260
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
150
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.7k
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
370
コードで差別化できない時代の ソフトウェアエンジニアリング / Software Engineering in an Era Where Code Doesn’t Differentiate
kishida
2
180
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
150
[JA] Domain Modeling with Vanilla Rails: 「操作」から再考するRailsの設計論
yasaichi
0
210
Workers Cache を知る
syumai
0
370
AIに “答え“を書かせるのを やめてみた
___akari11
0
120
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
160
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
590
ActionController meets Protocol Buffers
sorah
0
530
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.7k
Designing for Performance
lara
612
70k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Fireside Chat
paigeccino
43
4.1k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
280
The untapped power of vector embeddings
frankvandijk
2
1.9k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
570
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Transcript
dataclassを使うと幸せになれる Mizuki Kobayashi, BI-team, Eureka Inc. 1
whoami • 小林 瑞紀 ( @mizkino ) • BI チーム
@eureka • Python / SQL / Machine Leaning • 出身 • 愛知県 • 京都大学 工学部電気電子工学科 卒 (4年) • 東京大学 情報理工学系研究科 中退 (5年) • 趣味 • DJ / テニス / ダイビング / FORTNITE / R6S 7
• Python3.7 から追加された新機能 • 新しく追加された dataclasses モジュール内の関数 • デコレータとしてクラスをラップすると便利関数群を追加してくれる dataclassとは
dataclassを使う嬉しみ (1) • init でインスタンス変数を初期化する部分を追加してくれる • 結果、コードが簡潔で読みやすくなる • 副作⽤として、TypeHint を書くようになる
• mypy で事前に構⽂のチェックができる • 他⼈が読みやすく使い回ししやすくなる namedtuple にもある強み こっちの方が 好き
dataclassを使う嬉しみ (2) • mutable(可変)なオブジェクトとして扱える • 多⽅で使い回しつつ値を変えて試⾏錯誤させたいとき便利 • 変数ごとに様々な属性を設定してくれる,設定できる • dataclasses.field
を⽤いて設定できる(後述) namedtuple には無い強み
• immutable な変数を使う場合は named_tuple でもOK • 3.7より前から使えるので汎⽤性は⾼い • dataclass は
dict ベースだけど named_tuple は tuple ベース • dataclass の⽅がアクセスは早い • メモリ使⽤量は named_tuple の⽅が優秀 • 参考 : https://stackoverflow.com/questions/51671699/data-classes-vs-typing-namedtuple-primary-use-cases • named_tuple は for ⽂で回せるので便利 • named_tuple は _asdict() • dataclass は dataclasses.asdict() か vars() で dict 型にできる named_tupleとの⽐較
パラメータによって挙動を制御可能 • init は __init__() を⽣成するか • repr は __repr__()
を⽣成するか • eq は __eq__() を⽣成するか • order は __lt__(), __le__(), __gt__(), __ge__() を⽣成するか • unsafe_hash は __hash__() を eq,frozen に依らず⽣成するか • frozen は immutable(不可変) にするか dataclassのパラメータ
fieldの設定 個々の変数は field を使って細かく設定可能 • default / default_factory はどちらかのみ •
両⽅与えるとValueError • repr は __repr__() の出⼒に含むかどうか • hash は __hash__() に含むかどうか • Noneだとcompareの値が使われる (推奨) • init は __init__() でインスタンス変数を初期化するか • compare は⽐較に⽤いるかどうか • metadata でサードパーティ⽤の値を持たせられる
dataclassのハマりどころ (1) • mylist: List のデフォルト変数を与えたいんだけど、、、 ValueError: mutable default for
field mylist is not allowed: use default_factory default_factoryを使う(引数なしでデフォルト値を返す関数) or Tupleにしましょう
dataclassのハマりどころ (2) • __init__() をもうちょっと変えて、引数組み合わせて変数作りたい Too long. Pointless. Simple. 最高。
__post_init__ 使うべき
dataclass実践編 Too long!書き漏らしもあるかも dataclass Simple. 読みやすいわかりやすい。 型チェックもできる。安全。最高。
• Python3.7 以上を使ってる⼈は、 dataclass を使って欲しい • 3.7 未満の⼈は named_tuple でも
OK とにかく、 __init__() で只管インスタンス変数初期化するのやめよう まとめ