Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 6, 2017 06:41:52

O_Bannon
Зарегистрирован: 2017-01-06
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

'module' object has no attribute 'draw'

Помогите, пожалуйста, совсем начинающему. Несколько дней ковыряюсь, не могу понять в чем проблема. Почему вылетает ошибка 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)

Почему в Ball есть draw, а он мне пишет, что нет его?
Как мне просто создать объект в классе Main из другого класса?

Отредактировано O_Bannon (Янв. 6, 2017 07:31:26)

Офлайн

#2 Янв. 6, 2017 08:06:15

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

'module' object has no attribute 'draw'

1. import Ball => from <file_name> import Ball
2.
if __name__ == “__main__”:
pass

3. from Main import screen - в трейсе проверьте импортируется ли !!!



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Янв. 6, 2017 13:20:42

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

'module' object has no attribute 'draw'

O_Bannon
посмотрите внимательно что Вам пишет интерпретатор и что вы делаете:

O_Bannon
‘module’ object has no attribute ‘draw’
O_Bannon
'module’ object
и
O_Bannon
import Ball
Вы импортируете не класс определенный в модуле, а модуль в котором есть класс. Сделайте
from Ball import Ball



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Отредактировано JOHN_16 (Янв. 6, 2017 13:20:57)

Офлайн

#4 Янв. 6, 2017 13:30:16

O_Bannon
Зарегистрирован: 2017-01-06
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

'module' object has no attribute 'draw'

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()

Hello там от другого класса. И при том работает, а просто круг нарисовать не получается по той же логике.

 class Hello:
    def __init__(self, x,y):
        self.a = x
        self.b = y
obj1 = Hello("hello","world")
print (obj1.a, obj1.b)
Я уже все перепробовал и читать мануалы, ну там не пишут ведь, как из другого файла создать объект.
И, тогда, я не понимаю, почему import Hello получилось, а здесь необходимо from Ball import Ball

Отредактировано O_Bannon (Янв. 6, 2017 14:17:47)

Офлайн

#5 Янв. 6, 2017 15:08:16

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

'module' object has no attribute 'draw'

Во первых, Вы молодец что стараетесь - это видно.
Во вторых, у вас ошибки в коде связанные пока что с недостатком знаний в разных областях программирования. Причем как со знанием самого Питона, так и с архитектурой построения приложений.
Я исправил Ваш код что бы он стал рабочим. Смотрите внимательной:
Структура проекта

 (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()
Если вы вызовете на исполнение основной файл main.py - то на экране нарисуется круг.
Я не буду оставлять комментарии сейчас, изучите код внимательно и когда у вас появятся вопросы, четко сформулируйте их и мы Вам поможем.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#6 Янв. 6, 2017 15:47:08

O_Bannon
Зарегистрирован: 2017-01-06
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

'module' object has no attribute 'draw'

Спасибо, получилось. Интересно еще то, что если оставить “from Main import screen” в Ball, он выдает ошибку. Казалось бы, почему бы просто не проигнорировать. А так получилось всё.

Офлайн

#7 Янв. 6, 2017 15:57:32

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

'module' object has no attribute 'draw'

O_Bannon
почему бы просто не проигнорировать
ты импортируешь screen, когда он еще не создан
pygame->screen->объект screen

Офлайн

#8 Янв. 6, 2017 16:00:04

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

'module' object has no attribute 'draw'

Ошибки нельзя игнорировать, потому что это может вызвать не предсказуемые действия программы. Представьте что из за проигнорированных ошибок Ваша программа неожиданно удалила не 1 временный файл, а тысячу нужных. Не хотелось бы такого, не правда ли? это был риторический вопрос



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version