質問: TestExtends() test.append("python") test.append("-") test.append("izm") print "===============" for i in test: print i ```
回答: 予約語以外は変数です。listも(ビルトイン)変数です。 問題は、変数は何でも入るので、今その変数に何が入っているのかを把握することが重要です。 > > 1、継承元がlistだと思うのですが、... 変数ではないんですか? > > > 変数ですが、中に入っている型が重要です。listは標準でクラスが入っている変数ですね。 > > 2、selfってクラス関数の第一引数だからインスタンスを代入されたtの事だと思うのですが > > > その通りです > > 7、10行目を見るとどうやらリストになっているみたいでよくわかりません。 > > > クラスを"棒のハンコ"、インスタンスをそれを"紙に押したハンコ"と思ってください。 どちらも「ハンコ」なのでわかりづらいですね。listも同じです。 > > 3、上記のコードの7、9、10行目のselfをlistに置き換えても失敗するのはどうしてでしょう? > > > 「"紙に押したハンコ"を"棒のハンコ"に置き換えたら動きません」当たり前ですね。 > > 下記のコードではうまくいっていますが違いがありません。また逆に下記のコードでlistをselfに置き換えてもうまくいきません。 > > > ここがPythonのややこしいところです。以下の文章が参考になるでしょう。 Pythonは初期はクラスを持っておらず、後から追加した際にこのような仕様で「吸収」した経緯があります。 9.3.4. メソッドオブジェクト > > x = MyClass() ... (中略) ... x.f() という呼び出しは、 MyClass.f(x) と厳密に等価なものです。 > > > ただし、実際には「MyClass.f(x)」ではなく「x.f()」のほうが良いでしょう。 なぜなら、後からMyClassではなくYourClassに変えたくなった時に、最初の1箇所だけ変えれば良いためです(別のやり方だと2箇所変えなくてはならないし、YourClassがMyClassを継承している場合は忘れる可能性が非常に高いし、忘れたことに気づきにくい)。