简体   繁体   中英

put def function into Class: takes at most N arguments (N+1 given)

this funstion works well :

def create_layer(layers_list,position=0,layer_obj=None):
    if not layer_obj:
        layer_obj,created = Layer.objects.get_or_create(name=layers_list[0])   
        return create_layer(layers_list,position,layer_obj)  
    else:  
        position +=1
        if position < len(layers_list) : 
            obj,created = Layer.objects.get_or_create(name=layers_list[position],parent=layer_obj)
            return create_layer(layers_list,position,obj)
        else:
            return layer_obj

But when I put it into class, I got error :

create_layer() takes at most 4 arguments (5 given)





class Test():

    def test1(self):
        self.create_layer(layers_list)


    def create_layer(self,layers_list,position=0,layer_obj=None):
        if not layer_obj:
            layer_obj,created = Layer.objects.get_or_create(name=layers_list[0])
            return self.create_layer(self,layers_list,position,layer_obj)
        else:
            position +=1
            if position < len(layers_list) :
                obj,created = Layer.objects.get_or_create(name=layers_list[position],parent=layer_obj)
                return self.create_layer(self,layers_list,position,obj)
            else:
                return layer_obj 

What happened??

How can I fix it ??

Don't pass self to self.create_layer when calling it recursively. This is done for you by Python when it calls a method of a class instance. What happens here is that Python adds another self to the front of your argument list, thereby making it one argument too many.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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