繁体   English   中英

你如何在__init__中调用类的方法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM