Magicode logo
Magicode
2

pythonのプロパティのあれこれ

5 min read

#はじめに pythonの「property」について理解できていなかったので、 いろいろ調べたことをまとめていきたいと思います。

#そもそもプロパティってなんだっけ? 簡単Pythonには、

値をしっかり管理したいけど、インスタンス変数のように自然に値にアクセスできるようにもしたい。

この両者のいいとこ取りをしたのが、「プロパティ」。

と書かれています。 要は外から簡単に値を変得られない上に、取り出しは簡単にしたい時に役立つものと思ってもらったら良いです。

プロパティはこんな感じで定義します。

を見たら「ハイ!きた!」と思ってください。

#インスタンス変数って? プロパティは、インスタンス変数とつながりがあるので、ここではインスタンス変数について説明していきます。 インスタンス変数とは、クラスを実行する時に生成するインスタンスごとに独立して存在する変数です。 ちょっと難しいですよね。

この「self.message」がインスタンス変数です。 次に全体の定義と動きを見ていきましょう。

上のコードでわかるように簡単に値を取り出せますが、変更も簡単にできてしまいますよね。 変更が簡単にできてしまうと、間違えて変更してしまうなどの予期せぬことが起きてしまいます。 先ほども言いましたが、変更などの管理がしっかりできて、簡単に取り出せるものがプロパティです。

さっそく活用例を参考に理解を深めていきましょう。

#プロパティの活用例

①で「Hello」を引数として渡し、「self.message」の中身が「Hello」になります。 ②messageメソッドを呼び出すと、「Hello」が戻り値として返ってきます。 ③「message」の値を空文字列に変更しています。 ④③で空文字列に変更したはずですが、再び「Hello」が表示されています。 なぜでしょう? 新たな値を設定する時、まず「@message.setter」のところで手続きが行われます。 今回はこのように空文字列以外の時変更受け付けますよと言っています。 よって空文字列は拒否されたため「Hello」が表示されたのです。 ⑤懲りずに次は「Bye!」に変更しようとします。 ⑥今回は空文字列ではないので、変更が許可されました。

また、今回は「__message」として、外部から直接アクセスされることはありません。 「__」のように_が2つついているものは、外部からのアクセスができないので覚えておいてください。

このように値を新たに設定する時に、予想外のものが入ってしまわないように制御できるのがポイントです。

この章で大まかな動きは理解できたと思います。 次の章ではもう少し詳しく見ていきましょう。

#propertyとsetterの動き propertyとsetterがついている部分がどのように呼び出されているの確認して、理解を深めましょう。

②で、'inside the getter'と表示されていことから分かるように、'@property'が呼び出されていることがわかります。 一方、③で値を変更させるときは'inside the setter'とあるように、'@name.setter'の方が呼び出されています。 その結果、④では正常に値が変更されています。

このことから分かるように値を呼び出す時には'@property'が呼び出され、値を変更する時に'@〇〇.setter'が呼び出されます。 そして、予期せぬ値が入り込まないように、'setter'で値を制限することができます。 気付いた人もいるかもしれないですが、呼び出しの際にも'()'が最後に必要ないので簡単に呼び出すことができます。

#最後に 今回はプロパティに関して説明してきました。 「簡単に呼び出せて、値の設定はきっちり行うもの」と認識してもらうと理解が早まるのかなとおおいます。 今後も記事はアップデートし行きます。 また、時間があれば他の記事も覗いていってください。

Discussion

コメントにはログインが必要です。