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 中调用类的方法?
答案 0 :(得分: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()
<强>输出:强>
['!', '!', '!']
['!', '!', '!']
答案 1 :(得分: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
答案 2 :(得分:0)
您的代码不包含任何classmethods。
你实际上正在调用你正在调用的实例方法,它除了返回None
之外什么都不做。
另外,如果这是python 2.7,一般来说,如果你从object
(或其他一些类)继承,事情会更好。
答案 3 :(得分:-1)
您正在调用类方法,但参数是按值传递的,而不是通过引用传递的。如果您修改方法inp
中的my_function
,则不会反映在self.z
上。