メソッドのselfパラメータとグローバル変数について


まずサンプルプログラムを並べて、自分で実行結果がどうなっているか考えてみましょう.global vaを注釈すると、実行結果はどうなりますか?同時にglobal vaとva=[value]+vaの2行を注釈しますか?
#a.py
va = ['va1','va2','va3']
print('first:',id(va))

class TestGlobal():
    def __init__(self):
        pass
    
    def Tprint(self, value):
        global va
        va.append('test')
        va.insert(1,'va_ins')
        va = [value]+va
        return va
        
print('second:',va)

obj = TestGlobal()
print obj.Tprint('111')

2つの注意点:
1、pythonでは、クラス内のメソッド定義の最初のパラメータは常にselfであり、参照メソッドのオブジェクト自体(a.pyのobjオブジェクトなど)を表し、定義メソッドの文形はa.pyのTprint(self,value)などである.Javaにも似たようなオブジェクト自体を表すパラメータがありますが、定義時には明確に書かれないので、暗黙パラメータと呼ばれ、定義方法の文形はpublic void Tprint(value)のようです.2、Tprintのglobal修飾子に注意し、変数vaをグローバル変数として宣言することで、Tprint()がその上位のネーミングスペースの変数にアクセスできるようにする.逆に、ここでvaがグローバル変数として宣言されない場合、va=[value]+vaは「変数vaが付与される前に参照される」というエラーが発生し、ここでvaが関数内部で新しく生成された変数なのかグローバル変数vaなのかプログラムにはわかりません.