Писал код и возникла такая проблема, помогите решить пожалуйста Python

Рейтинг: -2Ответов: 1Опубликовано: 14.05.2023
File "E:\pythonProject\Новая папка\pythonProject\main.py", line 50, in <module>
    p0 = Planet(400, 400, 'red')
TypeError: Planet() takes no arguments

Вот ошибка

from tkinter import *
import math

G = 6.67 * 10**-11

class Planet:
    def __int__(self, x, y, color):
        self.coords = [x, y]
        self.size = (20, 20)
        self.mass = 1 * 10**24
        self.color = color
        self.velocity = [0, 0]
        self.ball = c.create_oval(self.coords[0] - self.size[0]/2,
                                  self.coords[1] - self.size[1]/2,
                                  self.coords[0] + self.size[0]/2,
                                  self.coords[1] + self.size[1]/2,
                                  fill=color)
    def do_force(self, *planets):
        for p in planets:
            delta = pow(10, 12)
            vector = [p.coords[0] - self.coords[0], p.coords[1] - self.coords[1]]
            vector_length = math.sqrt(pow(vector[0], 2) + pow(vector[1], 2))
            if vector[0] == 0:
                alpha = math.pi / 2
            elif vector[0] < 0:
                alpha = math.atan(vector[1] / vector[0]) + math.pi
            else:
                alpha = math.atan(vector[1] / vector[0])
            if vector_length < self.size[0]:
                vector_length = self.size[0]
            F = G * self.mass * p.mass / pow(vector_length, 2)
            Fx = F * math.cos(alpha)
            Fy = F * math.sin(alpha)
            self.velocity[0] += Fx / self.mass / delta
            self.velocity[1] += Fy / self.mass / delta

    def move(self):
        x = self.velocity[0]
        y = self.velocity[1]
        prev = [self.coords[0], self.coords[1]]
        self.coords[0] += x
        self.coords[1] += y
        c.move(self.ball, x, y)
        c.create_line(prev[0], prev[1], self.coords[0], self.coords[1], fill=self.color, width=3)


root = Tk()
c = Canvas(root, width = 800, height = 800, bg = 'gray')
c.pack()
p0 = Planet(400, 400, 'red')
p1 = Planet(100, 200, 'yellow')
p2 = Planet(20, 50, 'blue')
while True:
    root.update()
    p0.do_force(p1, p2)
    p1.do_force(p0, p2)
    p2.do_force(p0, p1)
    p0.move()
    p1.move()
    p2.move()

root.mainloop()

Ответы

▲ 1
def __int__(self, x, y, color):

У вас опечатка в имени метода __int__ вместо __init__. Из-за этого конструктор не вызывается при создании объекта. При попытке создания экземпляра класса возникает исключение.