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 回答