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

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

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

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

Q&A

解決済

2回答

912閲覧

Python3 で property decorator の仕様が知りたい

yosukesan

総合スコア34

Python

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

0グッド

1クリップ

投稿2021/06/05 15:21

編集2021/06/05 15:27

python はメインの言語ではなく経験が浅いです。

下記の ['', setter, deleter] ような、property decrator の種類が知りたいです。
PEP562, EPE549 あたりに少し記述があるのを確認したのですが、まとめられた物はないのでしょうか?
できれば、個人の調査でなく PEP の番号を教えていただけるた助かります。

追記: PEP318 の記載で全てでしょうか?

# https://qiita.com/Sylba2050/items/d6f23ac13a0cc5da0c17より引用 class MyProperty(object): def __init__(self, x): self._x = x @property # propertyの時は x.getterと同義 def x(self): return self._x @x.setter def x(self, v): self._x = abs(v) # 更新前に何らかの処理をはさめる @x.deleter def x(self): self._x = None

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

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

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

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

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

guest

回答2

0

ベストアンサー

propertyはdecoratorとして使える組み込みのクラスの一つです。

Pythonで言語レベルで機能しているのはdecoratorの方であり、decoratorとして機能する関数やクラスを自分で定義して使ったりすることもできます。

それに比べればpropertyクラスなどは一つの応用に過ぎず、仮に組み込みになかったとしても、同様に機能するものをpure Pythonで書くのは原理的には可能……と思ったけど、恐らく属性アクセスの仕組みの側でpropertyオブジェクトへの参照を特別扱いにしているので、mypropertyを作るのは難しいかもしれない……。

いずれにせよ、Pythonの「プロパティ」関連の機能は、けっきょくこれがすべてです。基本的には、クラスという仕組みとデコレータという仕組みの上に「プロパティのように使えるもの」を実装しているだけです。

同じような応用として、classmethodなどが組み込みで定義されています。こちらも同じような位置づけです。

組み込みの「デコレータとして使えるもの」は「組み込み関数」のページにまとめて書かれています(それでぜんぶ、のはず)。@でページ検索するとわかりますが、

  • classmethod
  • property
  • staticmethod

だけです。なお、他に組み込みモジュール内に定義されているデコレータも存在します(functools.lru_cacheなど)。


……という関係性がよくわからなくて混乱していそうな気がしたので、書いてみました。違っていたらすみません。

投稿2021/06/05 17:02

編集2021/06/05 17:46
hayataka2049

総合スコア30933

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

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

yosukesan

2021/06/06 02:36 編集

検索のやり方を教えていただきありがとうございました。 pep-3129 に decorator の EBNF があるの見逃がしていました。class decorator と(member) function decorator で別の型として AST を構成しているようです。つまり、言語仕様だと思います。なお、コードでの実装までは確認していません。decorator 型はこの 2 種類しか定義されていないので、ユーザー定義の property は定義できないということですね。理解しました。
guest

0

公式ドキュメントのclass propertyに書かれている以上の何を知りたいのでしょう?

投稿2021/06/05 15:57

ppaul

総合スコア24666

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

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

yosukesan

2021/06/05 16:28

上記の class property に記載で全てなのですか? @classmethod なども見かけるのですが、関数に対しての decorator ではないのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問