Почему я получаю пропущенный обязательный позиционный аргумент, когда он предоставляется? - PullRequest
2 голосов
/ 23 марта 2020

Я пытаюсь написать программу boid, используя python, у меня есть программа с именем boid.py, которая определяет класс boid, и другая программа с именем flocking practice.py, которая должна использовать создание boids и рисовать их на экран. код в boid.py:

import numpy
import random

from pygame.locals import*

pg.init()

class Boid(object):
    def __init__(self,pos):
        object.__init__(self)
        self.pos = [pos[0]/2,pos[1]/2]
        self.vel = []
        self.accel = []

    def draw(self,screen):
        pg.draw.circle(screen,[255,255,255],self.pos,5)

, а код в flocking practice.py:

import pygame as pg
import sys

clock = pg.time.Clock()
screen_dimensions = [1000,800]
screen = pg.display.set_mode(screen_dimensions)

boid_list = []
flock_size = 1
white = [255,255,255]


for i in range(flock_size):
    new_boid = boid.Boid(screen_dimensions)
    boid_list.append(boid)

while True:
    for event in pg.event.get():
            if event.type == pg.KEYDOWN:
                if event.key == pg.K_ESCAPE:
                    sys.exit()
            if event.type == pg.QUIT:
                sys.exit()
    screen.fill(0)
    for i in range(len(boid_list)):
        boid.Boid.draw(screen)
    clock.tick(60)
    pg.display.update()

, когда я запускаю практику флокирования, это выдает мне сообщение об ошибке

Traceback (most recent call last):
  File "C:\Users\Chris\Documents\python programs\flocking practice.py", line 27, in <module>
    boid.Boid.draw(screen)
TypeError: draw() missing 1 required positional argument: 'screen'
[Finished in 1.219s]

почему он говорит, что пропускает позиционный аргумент, когда я передаю его в метод?

Ответы [ 2 ]

2 голосов
/ 23 марта 2020

Вы вызываете draw для класса, поэтому для него требуется аргумент self. Я думаю, что вы хотели сделать boid_list[i].draw(screen).

2 голосов
/ 23 марта 2020

Вы пытаетесь вызвать метод draw с классом Boid, а не с экземплярами Boid, хранящимися в boid_list.

for boid in boid_list:
    bond.draw(screen)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...