Форум сайта python.su
Помогите, пожалуйста, совсем начинающему. Несколько дней ковыряюсь, не могу понять в чем проблема. Почему вылетает ошибка callable, почему подчеркивает Ball()?
И в классе Ball есть метод draw, но мне пишет, что ‘module’ object has no attribute ‘draw’ . Спасибо заранее.
import pygame, sys import Hello import Ball pygame.init() screen = pygame.display.set_mode((640, 360), 0, 32) color = (23, 213, 54) ball = Ball() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() screen.fill(color) d = Hello.obj1 ball.draw() pygame.display.update()
import pygame from Main import screen class Ball(): def __init__(self): self.x = 200 self.radius = 15 self.y = 50 self.color = (12, 35, 67) def draw(self): pygame.draw.circle(screen, self.color, (self.x, self.y), self.radius)
Отредактировано O_Bannon (Янв. 6, 2017 07:31:26)
Офлайн
1. import Ball => from <file_name> import Ball
2.
if __name__ == “__main__”:
pass
3. from Main import screen - в трейсе проверьте импортируется ли !!!
Офлайн
O_Bannon
посмотрите внимательно что Вам пишет интерпретатор и что вы делаете:
O_Bannon
‘module’ object has no attribute ‘draw’
O_Bannonи
'module’ object
O_BannonВы импортируете не класс определенный в модуле, а модуль в котором есть класс. Сделайте
import Ball
from Ball import Ball
Отредактировано JOHN_16 (Янв. 6, 2017 13:20:57)
Офлайн
Cannot import name Ball.
Может я рано начал такие вещи экспериментировать, но просто хотелось бы быстрее понять логику питоновскую.
import pygame, sys import Hello from Ball import Ball pygame.init() screen = pygame.display.set_mode((640, 360), 0, 32) color = (23, 213, 54) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() screen.fill(color) d = Hello.obj1 ball = Ball.draw pygame.display.update()
import pygame from Main import screen class Ball: def __init__(self): self.x = 200 self.radius = 30 self.y = 150 def draw(self): pygame.draw.circle(screen, (12, 44, 56), (self.x, self.y), self.radius) ball = Ball()
class Hello: def __init__(self, x,y): self.a = x self.b = y obj1 = Hello("hello","world") print (obj1.a, obj1.b)
Отредактировано O_Bannon (Янв. 6, 2017 14:17:47)
Офлайн
Во первых, Вы молодец что стараетесь - это видно.
Во вторых, у вас ошибки в коде связанные пока что с недостатком знаний в разных областях программирования. Причем как со знанием самого Питона, так и с архитектурой построения приложений.
Я исправил Ваш код что бы он стал рабочим. Смотрите внимательной:
Структура проекта
(pgtest) john_16@Linux-home /tmp/pgtest $ ll *.py -rw-r--r-- 1 john_16 john_16 262 янв 6 16:00 ball.py -rw-r--r-- 1 john_16 john_16 363 янв 6 16:02 main.py
(pgtest) john_16@Linux-home /tmp/pgtest $ cat ball.py import pygame class Ball: def __init__(self, screen): self.x = 200 self.radius = 30 self.y = 150 self.screen = screen def draw(self): pygame.draw.circle(self.screen, (12, 44, 56), (self.x, self.y), self.radius) (pgtest) john_16@Linux-home /tmp/pgtest $ cat main.py import pygame import sys from ball import Ball pygame.init() screen = pygame.display.set_mode((640, 360), 0, 32) color = (23, 213, 54) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() screen.fill(color) ball = Ball(screen) ball.draw() pygame.display.update()
Офлайн
Спасибо, получилось. Интересно еще то, что если оставить “from Main import screen” в Ball, он выдает ошибку. Казалось бы, почему бы просто не проигнорировать. А так получилось всё.
Офлайн
O_Bannonты импортируешь screen, когда он еще не создан
почему бы просто не проигнорировать
Офлайн
Ошибки нельзя игнорировать, потому что это может вызвать не предсказуемые действия программы. Представьте что из за проигнорированных ошибок Ваша программа неожиданно удалила не 1 временный файл, а тысячу нужных. Не хотелось бы такого, не правда ли? это был риторический вопрос
Офлайн