プロパティとセッターを使ってクラスの変数を簡単に入れられるようにする
概要
クラス内で
@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を出力)
説明
通常のクラス定義では
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
のようにプライベート型にしないといけない
さもないとエラーになる