質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.32%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

198閲覧

pydanticのfieldとはクラスにおけるインスタンス変数という理解で良いでしょうか?

MF0524

総合スコア51

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2025/03/13 01:44

実現したいこと

お世話になります。pydanticを初めて使うのですが、少し気になる部分があるので確認させてください。
pydanticではBaseModelクラスを継承して、新しいデータモデルを定義したいのですが、コードの書き方で気になる箇所がありました。

発生している問題・分からないこと

表示されているコードはpydanticのドキュメントから取ってきました。
https://docs.pydantic.dev/latest/concepts/models/#basic-model-usage
Userクラスにて定義されているid, nameはBaseModelに型定義されたインスタンス変数が追加されたものという理解で良いでしょうか?つまりpydanticのfieldとはクラスにおけるインスタンス変数という理解で良いでしょうか?
すみませんが私の理解が正しいのか確認させてください。どうぞよろしくお願いいたします。

該当のソースコード

Python

1from pydantic import BaseModel 2 3class User(BaseModel): 4 id: int 5 name: str = 'Jane Doe'

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

書籍などを用いて、pydanticで行われていることがBaseModelクラスを継承して、新しいデータモデルを定義しているのだということは理解しました。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Userクラスにて定義されているid, nameはBaseModelに型定義されたインスタンス変数が追加されたものという理解で良いでしょうか?つまりpydanticのfieldとはクラスにおけるインスタンス変数という理解で良いでしょうか?

後半の「つまりpydanticのfieldとはクラスにおけるインスタンス変数という理解で良いでしょうか?」はだいたい正しいと思いますが、前半の「BaseModelに型定義されたインスタンス変数が追加されたもの」は厳密にいうと違っている部分があるように思います。

python

1class User(BaseModel): 2 id: int 3 name: str = 'Jane Doe'

こう書いたとき、idnameUserクラスのクラス変数の定義です。
クラス変数の定義なのに、なぜオブジェクトを生成(インスタンス化)したときにインスタンスの属性(インスタンス変数)が作られるのかとなりますが、これはUserクラスがpydantic.BaseModelを継承しているので、BaseModelのメタクラスが定義中のクラス変数(やその他バリデーションのための関数)を元に機能を追加して、そういう風なクラスにしてくれるためです。
結果的には「BaseModelに型定義されたインスタンス変数が追加されたもの」になるので、誤った理解ということではないと思います。

初心者マークをつけられていますので、今はメタクラスとかの部分に足を踏み入れるのはやめておいたほうがいいと思います。こういう風に書けば、pydanticのモデルを定義できるというぐらいの理解でいいかと。

投稿2025/03/13 04:45

bsdfan

総合スコア4890

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MF0524

2025/03/13 11:14

ありがとうございます!完璧には分かっていませんが、雰囲気は伝わりました!
guest

0

Pythonの用語として"インスタンス変数"に定義がないので厳密な表現はできないのですが、"普段インスタンス変数と呼んでいるもの"に近いものと考えて差し支えはないと思います。

あらかじめ定義しておいたフィールド以外の"インスタンス変数"をセットしようとすると例外が発生する点が違います。

投稿2025/03/13 03:55

quickquip

総合スコア11277

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MF0524

2025/03/13 11:14

ありがとうございます!完璧には分かっていませんが、雰囲気は伝わりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.32%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問