【python】フィールドとかメンバ変数とか言われるやつの定義

こんにちは、えあーです。

先日pythonのコードを書いていたら、
独特なメンバ変数(フィールド)の書き方にやられました。

よくある言語での書き方

C++とかJavaとかを踏襲してpythonでクラスを作るとこんな感じになると思います。

これだけなら問題なかったんですけど、
以下のコードで問題が起きました。

Stringだったところがlistになっただけなんですけど、
これ、インスタンスごとに異なるリストではなく、
クラスに定義されたリスト扱いになってしまいます。

つまり複数インスタンス作っても全部同じ中身になってしまうと。
C++風に言うならstaticメンバ変数です。

回避方法

コンストラクタでself.をつけてください。

このようにすることで、fooがインスタンスごとに異なるリストになり、
インスタンスごとに異なる中身を保存できるようになります。

おそらくこっちが目的としている使い方の場合が多いと思うので、
是非覚えておいてください。

他の言語やってると絶対ハマるよなーと思いますが、
pythonはいろいろ変わった所あるから仕方ないかという感じです。

コメント

タイトルとURLをコピーしました