Уведомления

Группа в Telegram: @pythonsu

#1 Июль 4, 2022 23:13:03

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

помогите с ошибкой пожалуйста AttributeError: 'pygame.Surface' object has no attribute 'get'

Pygame для вас слишком сложно, вам бы для начала черепашку погонять



Офлайн

#2 Июль 4, 2022 23:14:10

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

помогите с ошибкой пожалуйста AttributeError: 'pygame.Surface' object has no attribute 'get'

Офлайн

#3 Июль 5, 2022 01:34:21

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

помогите с ошибкой пожалуйста AttributeError: 'pygame.Surface' object has no attribute 'get'

SemTimv12
1 pyGame это по большей части библиотека или фреймворк?
https://github.com/pygame/pygame/
pygame is a free and open-source cross-platform library for the development of multimedia applications like video games using Python.
Pygame - это биндинг такой к сишному SDL'у. А сишный SDL - это библиотека функций.

SemTimv12
2 Можно ли сказать что pyGame работает в программе как фреймворк?
Нет.

wiki. фреймворк и библиотека
Фре́ймворк (иногда фреймво́рк; англицизм, неологизм от framework — остов, каркас, рама, структура) — программная платформа, определяющая структуру программной системы; программное обеспечение, облегчающее разработку и объединение разных компонентов большого программного проекта.
Отличие от библиотеки

«Фреймворк» отличается от понятия библиотеки тем, что библиотека может быть использована в программном продукте просто как набор подпрограмм близкой функциональности, не влияя на архитектуру программного продукта и не накладывая на неё никаких ограничений. В то время как «фреймворк» диктует правила построения архитектуры приложения, задавая на начальном этапе разработки поведение по умолчанию — «каркас», который нужно будет расширять и изменять согласно указанным требованиям. Пример программного фреймворка — C.M.F. (Content Management Framework), а пример библиотеки — модуль электронной почты.

Также, в отличие от библиотеки, которая объединяет в себе набор близкой функциональности, — «фреймворк» может содержать в себе большое число разных по тематике библиотек.

Ключевым отличием «фреймворка» от библиотеки является инверсия управления: пользовательский код вызывает функции библиотеки (или классы) и получает управление после вызова. Во «фреймворке» пользовательский код может реализовывать конкретное поведение, встраиваемое в более общий — «абстрактный» код фреймворка. При этом «фреймворк» вызывает функции (классы) пользовательского кода.

SemTimv12
3 В чем заключается моя ошибка? FishHook говорит поправить строку, а py.user.next говорит сделать как и было.
FishHook говорит тебе прочитать документацию к Pygame и из неё узнать, какие методы есть в разных объектах, в том числе у объекта класса pygame.Surface.

Если ты её откроешь и там перейдёшь в раздел, описывающий класс pygame.Surface
https://www.pygame.org/docs/ref/surface.html
, то там в списке методов ты не найдёшь метод get или атрибут get, потому что там его нет.
Зато ты найдёшь там метод get_rect()
https://www.pygame.org/docs/ref/surface.html#pygame.Surface.get_rect

Твоя ошибка вот в этом месте
SemTimv12
  
self.screen_rect = self.screen.get.rect()
связана с тем, что ты перепутал get.rect с get_rect. В объекте self.screen ищется атрибут get, которого там нет.

Если ты эту ошибку исправишь и запишешь вместо этого
  
self.screen_rect = self.screen.get.rect()
вот это
  
self.screen_rect = self.screen.get_rect()
, то данная часть кода станет правильной и реакция интерпретатора питона
SemTimv12
  
 Traceback (most recent call last):
  File "C:\Users\Home\PycharmProjects\pythonProject\game_space\space_game.py", line 22, in <module>
    run()
  File "C:\Users\Home\PycharmProjects\pythonProject\game_space\space_game.py", line 12, in run
    gun = Gun(screen)
  File "C:\Users\Home\PycharmProjects\pythonProject\game_space\gun.py", line 11, in __init__
    self.screen_rect = self.screen.get.rect()
AttributeError: 'pygame.Surface' object has no attribute 'get'
перестанет возникать.

Это вот что касается моего совета. Совет FishHook'а - это научиться отыскивать имена атрибутов и не делать в них ошибок больше. Это более общий совет, как бы такое более правильное направление в изучении всей этой библиотеки Pygame. Мой совет - это исправить вот эту конкретную ошибку вот в этой конкретной программе, чтобы вообще запустить её и таким образом определить, стоит ли её дальше изучать, или она вся испещрена подобными ошибками и лучше взять какую-нибудь другую программу на Pygame и поизучать её.
Эти советы друг друга не исключают. Ты можешь и это сделать, и то.

Но вообще, твоя неспособность соориентироваться в атрибутах класса, в работе с документацией, в способах нахождения документации, в способах изучения документации, в понимании очевидных сообщений интерпретатора на экране, всё это говорит о том, что ты не только к Pygame не готов ещё, а что ты вообще питона не знаешь и тебе сначала надо основы питона изучить хотя бы. Твоё изучение Pygame, реализованном на питоне, похоже на попытку научиться ездить на велосипеде, не умея ещё вставать на ноги. Ты встань на ноги хотя бы. Если ты не понимаешь, что такое атрибут объекта класса вообще, то как ты поймёшь какими атрубитуами обладает объект класса поверхности в Pygame в частности?



Отредактировано py.user.next (Июль 5, 2022 01:41:30)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version