こんにちは。sinyです。
最近Pythonのクラスの活用を始めたのですが、いろいろと便利な利用方法があるものの都度調べているため、自分の備忘録を兼ねて簡単な事例でクラスの利用方法をまとめました。
※随時更新していきます。
プロパティの利用
Pythonのプロパティ機能を利用することでクラス内に定義されている値(インスタンス変数)を外から取得することができます。
class Test(): def __init__(self, lang=True): self.lang = lang @property def data_dir(self): _dir = "JA" if self.lang else "EN" return _dir inst1 = Test() print(inst1.data_dir) >> JA inst2 = Test(lang=False) print(inst2.data_dir) >> EN
クラス内で@propertyを付けた後に関数を定義して値をreturnで返してあげると、インスタンスを生成した後に、「インスタンス名.メソッド名」(かっこは不要)という形で実行するとインスタンス変数の値を取得することができます。
上記例では、Testクラスの引数にlang=True or Falseを指定することで返ってくる値をJA or ENに切り替えることができます。
クラスメソッドの利用
Pythonのクラスでは一旦クラスからインスタンスを生成した後でないとクラス内で定義されたメソッドを実行することができません。
ただし、クラスメソッド(@classmethod)を利用すると、クラスをインタンスしなくても直接クラスからメソッドを実行することができます。
class Test(): def __init__(self, lang="JA"): self.lang = lang @classmethod def show_lang(cls, lang): lang = "lang=" +lang return cls(lang) a = Test.show_lang("JA") print(a.lang) a = Test.show_lang("EN") print(a.lang) >>lang=JA >>lang=EN
ポイント
- @classmethodをつけた後の関数の第1引数にはclsをつける。
- returnにcls(クラス自体)を返すこともできる。
- @classmethodを利用する場合、「クラス名.関数名()」で呼び出せる。
→@propertyを使う場合は関数名の後に()は不要であったことと比較。
__call__メソッド
クラスのインスタンスが具体的な関数を指定されないで呼び出されたときに動作する関数。
インスタンスを生成した後に関数を指定せずにインスタンス名で実行すると__call__()の中身が実行される。
class Test(): def __call__(self, message): print("message=",message) return message instance1 = Test() instance1("テストです") #実行結果 >> message= テストです