[英]How do you call a class' method in __init__?
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中调用类的方法?
修改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()
输出:
['!', '!', '!']
['!', '!', '!']
问题是,你实际上并没有修改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
您的代码不包含任何classmethods。
实际上,您正在调用您正在调用的实例方法,除了返回None
之外,它不执行任何操作。
此外,如果这是python 2.7,一般情况下,如果从object
(或其他类)继承,事情会更好。
您正在调用类方法,但参数是按值传递的,而不是通过引用传递的。 如果修改inp
的方法my_function
,它不反映self.z
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.