Как унаследовать класс pygame?

Когда я запускаю этот код (это текущий весь код, то есть всего 3 строки):

import pygame
class sp(pygame.sprite):
    pass

Я получил:

TypeError: module() takes at most 2 arguments (3 given)

Я хотел бы унаследовать этот класс, чтобы создать к нему дополнительные объекты, а также выполнить некоторые из уже существующих функций.

Например, а не ...

mysprites = pygame.sprite.Group()

Я хочу...

mysprites = sp.Group()

Как я могу это сделать?

Когда вы создаете подкласс sprite, вы отменяете метод __init__? Если да, можете ли вы показать этот код?

all or None 17.09.2018 02:44

@ 101, я сейчас выложил весь код, т.е. всего 3 строчки ...

Rogério Dec 17.09.2018 02:50

Подождите, sprite - это модуль, а не класс, поэтому вы не можете создать его подкласс. Однако вы можете просто импортировать все из sprite в новый модуль.

all or None 17.09.2018 03:43
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
679
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как указано в комментарии @ 101, sprite - это pygame [sub] модуль, но сам по себе не Python class. Чтобы делать то, что вы хотите, вам необходимо наследовать свой подкласс от класса Sprite, который определяет модуль. Это означает использование чего-то вроде приведенного ниже. (В pygame документация есть также пример немного другого способа создания подкласса Sprite, на который вам, вероятно, стоит взглянуть.)

Также обратите внимание, что имена классов должны иметь начальную букву с заглавной буквы в соответствии с разделом Соглашения об именах в PEP 8 - Руководство по стилю для кода Python, поэтому я также исправил это.

from pygame.sprite import Sprite

class Sp(Sprite):
    pass

Чтобы ответить на другую часть вашего вопроса, где вы пытаетесь использовать sp.Group(). Проблема в том, что то, что вы пытаетесь сделать, просто неверно. Group - это отдельный "контейнерный" класс, который также определен в модуле pygame.sprite. Основная цель - сгруппировать несколько экземпляров класса Sprite. Он должен прекрасно справляться с вашим подклассом Sprite. Ниже приведен дополнительный код, показывающий, как это можно сделать:

from pygame.sprite import Group, Sprite

class Sp(Sprite):
    pass

# Create a Group container instance and put some Sp class instances in it.
mygroup = Group()
sp1 = Sp()  # Create first instance of subclass.
mygroup.add(sp1)  # Put it in the Group (NOT via sp1.Group())

sp2 = Sp()  # Create another instance of subclass.
mygroup.add(sp2)  # Put it into the Group, too.

Хорошо, а как выполнить текущий объект «Группа»? mysprites = Sp.Group()

Rogério Dec 17.09.2018 04:33

Последнее обновление моего ответа также касается этого аспекта вашей проблемы. Также см. Как использовать группы спрайтов в pygame.

martineau 17.09.2018 05:12

Другие вопросы по теме