4

コード:

class C:
    def __init__(self, **kwargs):
        self.w = 'foo'
        self.z = kwargs['z']
        self.my_function(self.z)    
    def my_function(self, inp):
        inp += '!!!'

input_args = {}
input_args['z'] = 'bar'
c = C(**input_args)
print c.z

期待される結果

bar!!!

実結果

bar

initでクラスのメソッドをどのように呼び出しますか?

4

4 に答える 4

5

self.zではなく、変更しinpます。

def my_function(self, inp):
    self.z += '!!!'

次に、Python では文字列は不変であるため、変更inpしても元の文字列オブジェクトには影響しません。

self.z可変オブジェクトの場合に何が起こるかを確認してください:

class C:
    def __init__(self, ):
        self.z = []
        self.my_function(self.z)    
    def my_function(self, inp):
        inp += '!!!'
        print inp
        print self.z

C()        

出力:

['!', '!', '!']
['!', '!', '!']
于 2013-07-11T16:40:53.803 に答える
4

問題は、実際に値を変更していないことですself.z

代わりにこれを試してください

class C:
    def __init__(self, **kwargs):
        self.w = 'foo'
        self.z = kwargs['z']
        self.z = self.my_function(self.z)    

    def my_function(self, inp):
        inp += '!!!'
        return inp

input_args = {}
input_args['z'] = 'bar'
c = C(**input_args)
print c.z
于 2013-07-11T16:42:54.550 に答える
0

コードにクラスメソッドが含まれていません。

実際、呼び出しているインスタンスメソッドを呼び出していますが、 return 以外は何もしませんNone

objectまた、これが python 2.7 の場合、 (または他のクラスから) 継承すると、一般的にはうまく機能します。

于 2013-07-11T16:42:08.670 に答える
-1

クラスメソッドを正しく呼び出していますが、パラメーターは参照ではなく値で渡されます。inpメソッド内で修正しmy_functionても反映されませんself.z

于 2013-07-11T16:41:31.090 に答える