Pythonのインスタンス変数

追記:2009/7/14
以下の内容だとクラス変数とインスタンス変数を同列に語っており、適切ではありません。
分かっててやるのなら良いけど、まずは以下のURLに書かれた指摘をご覧頂き、各自ご判断ください。
おれの不勉強によるものです。ご指摘ありがとうございました>hirataraさん

http://d.hatena.ne.jp/hiratara/20090630/1246332064




俺はPython初心者です。文化も、歴史も、流儀も分からない。だけど、下の書き方は許せない。

class Hoge:
  def __init__(self, name):
    self.name = name

  def doSomething(self):
    print self.name

なにが言いたいかというと、Hoge.doSomething()の中で使われているself.nameってのが何を意味しているのかわからん、ということなんだ。これは短いサンプルソースだし、self.nameに値を代入しているのが、__init__内だから、まだいい。だけど、長いコードの、どっかのメソッド内で突然インスタンス変数を作り出して、別のメソッドで利用されてしまうと、どこで何が宣言されているのかが分からなくなるんだ。

やっぱり、インスタンス変数(クラス変数も!)は先頭で宣言しないと気持ち悪い。だから、初期化の必要がなくても以下のように書いておく。

class Hoge:
  #名前
  name = None

  def __init__(self, name):
    self.name = name

  def doSomething(self):
    print self.name

それとも、この書き方が当たり前?
スクリプト言語って嫌いじゃないけど、宣言はしようぜ、って思う。