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)。