プロパティとセッターを使ってクラスの変数を簡単に入れられるようにする


概要


クラス内で

@property

の後に関数を書いてその中でreturnした値は

そのクラスのインスタンス名.関数名

で引き出せる。

またクラス内で

@関数名.setter

の中で定義したプライベート変数は

そのクラスのインスタンス名.関数名 = 〇〇

で値を入れられる。


class aClass():

    def __init__(self):
        self.__name = ''

    @property
    def man(self):
        return self.__name

    @man.setter
    def man(self,name):
        self.__name = name

ob01 = aClass()

ob01.man = 'Bob'
print(ob01.man)

ob01.man = 'John'
print(ob01.man)

aCalssというクラスを以下に定義

    コンストラクタを以下に定義する(引数なし)
        __nameに空白文字列を入力

    プロパティを以下に定義する
    manというプロパティを定義する
        __nameを返す

    manのsetterを以下に定義する
    manのsetterを以下に定義する(引数はname)
        __nameにnameを入れる

ob01をクラスaClassのインスタンスとする

ob01.manにBobを入れる(ob01の__nameにBobを入れる)
ob01.manを出力(ob01の__nameを出力)

ob01.manにJohnを入れる(ob01の__nameにJohnを入れる)
ob01.manを出力(ob01の__nameを出力)

出力


Bob
John

説明


通常のクラス定義では
class aClass():
    def __init__(self,name):
        self.name = name

ob1 = aClass('Bob')
print(ob1.name)

ob1 = aClass('John')
print(ob1.name)
となり値を入れるのに ob1 = aClass('Bob') としたり、値を取り出すのに ob1.name としなければならず、わかりにくくて面倒 これらをすべて ob01.man = 'John' ob01.man のようにすべて同じ書き方で入れたり表示したりできるので便利、というだけ

間違えやすい問題


注意点として、変数は

__name

のようにプライベート型にしないといけない
さもないとエラーになる