Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
pydanticの紹介
Search
mizzsugar
February 13, 2020
Programming
2
530
pydanticの紹介
mizzsugar
February 13, 2020
Tweet
Share
More Decks by mizzsugar
See All by mizzsugar
フルリモート向いてないと思っていた私が、なんだかんだ健やかに 1年半フルリモート出来ている話
mizzsugar
0
89
Djangoでのプロジェクトだって型ヒントを運用出来る!
mizzsugar
3
7.2k
「動くものは作れる」の一歩先へ 〜「自走プログラマー」の紹介〜
mizzsugar
0
390
pytestの第一歩 〜「テスト駆動Python」の紹介〜
mizzsugar
3
220
データ分析ツール開発でpoetryを使う選択肢
mizzsugar
1
890
unittest.mockを使ってテストを書こう
mizzsugar
5
5.6k
変数に変数を代入したら?
mizzsugar
0
2.3k
Djangoのパスワードハッシュアルゴリズムで_PyramidのWebアプリケーション作った.pdf
mizzsugar
0
630
unittest.mockを使ってテストを書こう ~モックオブジェクトを使ってより単体テストの目的に沿ったテストに~
mizzsugar
4
1.6k
Other Decks in Programming
See All in Programming
Code Reviews
bkuhlmann
4
890
効率化に挑戦してみたらモバイル開発が少し快適になった話
ryunakayama
0
120
SwiftUI Performance 不要なViewの再描画と更新を抑える
bigamitiongit
1
160
Rails と人魚の話/rails-and-mermaid
sanfrecce_osaka
0
100
ゆるい個人開発のススメ
kuroppe1819
10
980
雑に思考を整理する技術と効能
konifar
58
28k
今、知っておきたい! 生成AIエージェントの世界
elith
3
350
HUIT新歓2024「競技プログラミング、やってみませんか?」
slephy2784
1
260
使ってみよう Azure AI Document Intelligence
kosmosebi
2
270
0→1と1→10の狭間で Javaという技術選定を振り返る/Reflecting on the Decision to Choose Java Between Scaling from 0 to 1 and 1 to 10
jaguar_imo
2
380
Site Reliability Engineering for GMO
pyama86
7
1k
Elm Form Validation
bkuhlmann
0
510
Featured
See All Featured
Embracing the Ebb and Flow
colly
79
4.1k
Building a Modern Day E-commerce SEO Strategy
aleyda
16
6.4k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
501
140k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
186
16k
The Brand Is Dead. Long Live the Brand.
mthomps
48
28k
Scaling GitHub
holman
457
140k
Building Flexible Design Systems
yeseniaperezcruz
318
37k
Gamification - CAS2011
davidbonilla
76
4.6k
The Cost Of JavaScript in 2023
addyosmani
15
3.8k
We Have a Design System, Now What?
morganepeng
42
6.7k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
220
21k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
16
1.4k
Transcript
今いち推しのバリデーター pydanticの紹介 20200213 Stapy @mizzsugar0424
お前、誰よ • Twitter : @mizzsugar0425 • 仕事:データ分析基盤の開発、運用 ◦ GCP, BigQuery
• 前の仕事はDjango。今でも追いかけてる。 • 趣味:PythonでWeb開発 ◦ Pyramid, Nuxt.js, TypeScript, PostgreSQL • 2/29にPyCon mini Shizuokaに登壇予定 ◦ unittest.mockの話です • ゆるく転職活動 ◦ 面接中に水をガブガブ飲む人間でも良いという企業様、ぜひ
# type: ignore
それは、 静的型付けとPythonの両方を 愛する者たちを苦しめる コメント
従来のバリデーターだとTypingのサポートがない import colander class Item(colander.MappingSchema): # type: ignore name =
colander.SchemaNode(colander.String()) price = colander.SchemaNode(colander.Integer())
Typingサポートのあるバリデーター、pydantic • 2017年爆誕 • Typingサポートあり • Python製WebフレームワークFastAPIでも紹介されている • mypy pluginあり
https://pydantic-docs.helpmanual.io/
基本的な書き方 import pydantic class Item(pydantic.BaseModel): name: str price: int
基本的な書き方 external_data = { 'name': 'chocolate', 'price': 500 } try:
item = Item(**external_data) except ValueError e: e.json() # エラー内容が返される
まるでオブジェクトを扱うよう class User(pydantic.BaseModel): name: str birthday: datetime.date friends: List[int] favorite_color:
Optional[str] int, str, List, Optional, datetime… などわりと使う型はサポートされている
楽々json! user = User.parse_raw('{"id": 123,"signup_ts":1234567890,"name":"John Doe"}') print(user) #> id=123 signup_ts=datetime.datetime(2009,
2, 13, 23, 31, 30, #> tzinfo=datetime.timezone.utc) name='John Doe'
快く使うために: mypy pluginのページは読んでね error: Module 'pydantic' has no attribute 'BaseModel'
[attr-defined] ↑mypy から注意されたけど ドキュメントのmypy pluginの設定を追加したら解消されたので 良く読もう https://pydantic-docs.helpmanual.io/mypy_plugin/
さらば、 # type: ignore
ありがとうございました。