property() 属性記述子

最終更新:2026-09-22

property() 属性記述子

property(fget, fset, fdel, doc) はメソッドを属性のようにアクセスできるオブジェクトに包む。@property デコレータも使用可能。

カテゴリ組み込み関数
種類組み込み関数
Python バージョンall

📝 構文

property(fget[, fset[, fdel[, doc]]])

⚙️ 引数

fget 任意Function for getting the attribute value (getter).(デフォルト値:None)
fset 任意Function for setting the attribute value (setter).(デフォルト値:None)
fdel 任意Function for deleting the attribute (deleter).(デフォルト値:None)
doc 任意Docstring for the property.(デフォルト値:None)

戻り値:A property object, a data descriptor accessed like a normal attribute.

▶ 例

下のコードを編集し「実行」をクリックすると、出力パネルに結果が表示されます:

実行結果:

10
さらに多くのケースは近日公開予定です。

❓ よくある質問

Qproperty は何のためのもの?
Aメソッドを属性アクセスとして扱います。obj.x で getter のロジックが走り、呼び出しに括弧が不要になり、代入時の検証(setter)もできるため、「計算属性」とカプセル化を実現します。
Q@property と @x.setter はどう組み合わせますか?
A@property で読み取りロジックを、@x.setter で代入検証を定義します。c.x = 10 とすると setter が走ります。@property だけで setter を定義しない場合、代入すると AttributeError: can't set attribute になります。
Qproperty と普通のメソッドの違いは?
Aアクセス方法が異なり(obj.x() ではなく obj.x)、さらに property は読み取り・代入・削除の3操作を横取りできるため、内部フィールドのカプセル化と検証に適しています。
Q計算属性は結果をキャッシュしますか?
Aしません。obj.x にアクセスするたびに getter が再実行されます。キャッシュしたい場合は自分で実装する必要があります(例:functools.cached_property)。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%