__init__() 缺少 4 个必需的位置参数

时间:2021-03-12 02:18:42

标签: python python-3.x

我已经创建了这段代码,但我一直收到错误:TypeError: init() 缺少 4 个必需的位置参数:'x'、'y'、'r' 和 'color' .任何的想法?请

这是我的代码如下:

import math
    
    class objeto:
        def __init__(self,x, y, r, color):
            self.x = x
            self.y = y
            self.r = r
            self.color = color
            
        def colicionEntre(self,pelota):
            distancia = math.sqrt(pow(self.x-pelota.x,2)+pow(self.y-pelota.y,2))
            radios = self.r + pelota.r
            cad = "La pelota " + self.color + " y la pelota " + pelota.color
            if(distancia<radios):
                cad = cad + " si colicionan"
            else:
                cad = cad + " no colicionan"
            return cad
    
        def procesarLista(self,listaPelotas):
            for i in range(len(listaPelotas)):
                for x in range(i,len(listaPelotas)):
                    if(listaPelotas[i]!=listaPelotas[x]):
                        print(listaPelotas[i].colicionEntre(listaPelotas[x]))
                        
    pelota = objeto(3,4,2,"Amarilla")
    pelota2 = objeto(5,5,1,"Verde")
    pelota3 = objeto(2,2,1,"Roja")
    pelota4 = objeto(1,1,1,"Azul")
    lista = [pelota,pelota2,pelota3,pelota4]
    objetoObj = objeto()
    objetoObj.procesarLista(lista)

3 个答案:

答案 0 :(得分:2)

class objeto:
    def __init__(self,x, y, r, color):

你的类有 4 个参数,但是当你调用它时:

objetoObj = objeto()

你没有给它任何参数。尝试输入参数(它们可能是 None

答案 1 :(得分:1)

您的错误的核心问题是您试图创建一个需要 4 个位置参数的对象,而您没有提供这些参数。

objetoObj = objeto()

根据您的代码以及您似乎打算实现的目标,您应该将函数procesarLista 移到类的外部

完成此操作后,您可以将对象列表传递给您的函数,无需删除 self,您的函数将按照您编写的方式运行。

import math
    
class objeto:
    def __init__(self,x, y, r, color):
        self.x = x
        self.y = y
        self.r = r
        self.color = color
        
    def colicionEntre(self,pelota):
        distancia = math.sqrt(pow(self.x-pelota.x,2)+pow(self.y-pelota.y,2))
        radios = self.r + pelota.r
        cad = "La pelota " + self.color + " y la pelota " + pelota.color
        if(distancia<radios):
            cad = cad + " si colicionan"
        else:
            cad = cad + " no colicionan"
        return cad

def procesarLista(listaPelotas):
    for i in range(len(listaPelotas)):
        for x in range(i,len(listaPelotas)):
            if(listaPelotas[i]!=listaPelotas[x]):
                print(listaPelotas[i].colicionEntre(listaPelotas[x]))
                    
pelota = objeto(3,4,2,"Amarilla")
pelota2 = objeto(5,5,1,"Verde")
pelota3 = objeto(2,2,1,"Roja")
pelota4 = objeto(1,1,1,"Azul")
lista = [pelota,pelota2,pelota3,pelota4]

procesarLista(lista)

输出


La pelota Amarilla y la pelota Verde si colicionan
La pelota Amarilla y la pelota Roja si colicionan
La pelota Amarilla y la pelota Azul no colicionan
La pelota Verde y la pelota Roja no colicionan
La pelota Verde y la pelota Azul no colicionan
La pelota Roja y la pelota Azul si colicionan
>>> 

答案 2 :(得分:0)

除了其他人注意到的关于您的对象的主要问题之外,您还可以简化您的procesarLista()方法并删除条件语句,如下所示:

def procesarLista(self, listaPelotas):
    for i in range(len(listaPelotas)):
        for x in range(i+1, len(listaPelotas)):
                print(listaPelotas[i].colicionEntre(listaPelotas[x]))

#output:
La pelota Amarilla y la pelota Verde si colicionan
La pelota Amarilla y la pelota Roja si colicionan
La pelota Amarilla y la pelota Azul no colicionan
La pelota Verde y la pelota Roja no colicionan
La pelota Verde y la pelota Azul no colicionan
La pelota Roja y la pelota Azul si colicionan