Pythonのプロパティ(クラス内部変数の公開)

説明

クラスインスタンスの内部変数の公開

デコレータ「@property」を使う

Pythonでクラスを実装するとき
内部変数を公開するために
JavaやVBのように
セッターゲッターメソッドを書きたくなる。

Pythonは内部変数とはいえ
公開されているものなので
セッターゲッターメソッドを書く必要はないのだが
クラスの意思を表現する意味にはなる、と思う。

だが、Pythonには、内部変数を公開する
もっといい方法「プロパティ」がある。

プロパティを使う方法はいくつかあるが
ぼくは、デコレータを使う方法で実装している。

こんな感じ。

フルーツのクラス

フルーツのクラスは色プロパティを持っている。

class Fruit():

    def __init__(self, color):
        self.__color = color

    @property
    def color(self):
        return self.__color

    @color.setter
    def color(self, color):
        self.__color = color

インスタンス生成時に、フルーツの色を与えると
colorプロパティで参照したり設定したりすることが出来る。

こんな感じ。

apple = Fruit('red')
print(apple.color)

apple.color = 'yellow'
print(apple.color)

(実行結果)
red
yellow

内部変数と公開するプロパティ名の関係に注意

例としたフルーツクラスのcolorプロパティの内部変数は
__color という名前にしている。

これをプロパティ名と同じ
color
という名前にすると、うまくいかない。

内部で再帰呼び出しが発生して
例外で落ちてしまうのだ。

この挙動を知らないと
ちゃんとコードを書いてるのに
うまくいかない、となるので注意。

そんなこともあるけれど
この方法は
ゲッターセッターメソッドで実装するよりも
とってもシンプル。

そしてデコレータ@propertyで
明確にプロパティだ!とわかるから
メンテナンスもしやすい。

Pythonバンザイ

タイトルとURLをコピーしました