すえー blog

学んだ情報をOutPutする場所です。

Javaをやってた俺がpythonでちょっと混乱したこと

自分のメモも兼ねて残しておく。

内容

それはpythonでクラスを定義して、メソッドを作成した時に起きた。
まずはpythonのクラスの定義

class hoge:

次はメソッドの定義

class hoge:
    def fuga(self):
        ・・・・・・・

なんかselfが出てきた。
javaで言う、this的な扱いだと解釈した。
上記のメソッドを呼び出そうとするとselfの引数を入れろと怒られる。。。
selfはいらないんだよなーと思いながら、調べると@classmethod@staticmethodがあるらしい。

対処法

こうすれば良い。

@staticmethod
def a_method():
    ・・・・・・・

メソッドからクラス内のメソッドを呼び出す場合はこうすれば良い。
clsにクラスのインスタンスがいるので呼び出せる。これもjavaで言うthisがないのでthisの代わりだと解釈している。
調べるとインスタンス変数にはアクセスできないらしい。

@classmethod
def b_method(cls):
    cls.a_method()

これがスマートなのかわからないが、不要な引数は受け取る必要はないと考えているので一旦、この考え方で進んでみようと思う。