つぶやきテック

日々のつぶやきアウトプット

つぶやき@properpy

@○○.setterと@property

ここでは「@○○.setter」「@property」についてすこしお話ししてみます。

はじめにざっくり言ってしまうと、この2つはJavaのクラスでいうset, getメソッドにあたるものです。 でもじゃあ、なんで「def set○○」「def get○○」という書き方じゃないんでしょうね。

Pythonic v.s. オブジェクト指向

ちょっぴり、詳しくみてみましょう。 PythonにはPythonic(パイソニック)という「コードを書くときの考え方」があって、 そこで「読みやすくて単純なコードを書こう」というようなことがうたわれています。 つまり、Pythonicに則れば「(変数名).get_name()」と書くよりも「(変数名).name」というように 書きたいな~というわけですね。

けれども、オブジェクト指向的な考え方に基づくと、オブジェクトの変数に直接代入するのは 危険。そのリスクを避けるための「知恵」がset, getメソッドでした。

すると自然と、「Pythonでクラスを実装するときは変数呼び出しするような見た目で メソッド呼び出ししたいよね」という声が出てくることになります。 その声に応えるものが「@○○.setter」&「@property」、というわけです。

ちなみに、こうした「@xxx」はJavaのsetter/getterと「完全に同じ」ではないので、 気になる方は調べてみても良いかもしれません。 (そしてお詳しい方、補足等お待ちしておりまする<m(__)m>)