2013-05-01 4 views
3

Я довольно новичок в python, и я читаю книгу о создании игр с pygame. Я натолкнулся на эту часть кода в книге. Я не понимаю, зачем нужен Sprite.__init__(self). Я запустил код с этим прокомментированным, и он работает одинаково.Для чего используется __init__?

class Creep(Sprite): 

    def __init__( 
      self, screen, img_filename, init_position, 
      init_direction, speed) 

     Sprite.__init__(self) 

     self.screen = screen 
     self.speed = speed 
     self.base_image = pygame.image.load(img_filename).convert_alpha() 
     self.image = self.base_image 

Кто-нибудь есть какие-либо идеи, почему это там, и почему люди называют INIT?

+0

Это просто специальный метод, который действует как конструктор для создания экземпляра объекта класса. (Существует даже конструктор для создания класса). Это вам не нужно, если вы этого не хотите. '' self'' - это просто название конвенции, чтобы сказать '' this''. Подумайте об этом таким образом, методы класса, такие как '' __init__'', нуждаются в ссылке на себя, и первый аргумент всегда будет '' self''. Есть исключение: staticmethod в классе. Но давайте не доберемся туда, пока вы не поймете цель init и self. – CppLearner

+0

'Sprite (self)' будет достигнуть того же, что и 'Sprite .__ init __ (self)', но создать экземпляр для этого. Это использование немного странно, поскольку он вызывает метод '__init__', не беря полученный экземпляр. – mfitzp

+0

Только что заметил 'класс Creep (Sprite):' - похоже, что это эквивалентно выполнению 'super (Creep, self) .__ init __()' для текущего класса. – mfitzp

ответ

1

Это вызов метода инициализации суперкласса. Предположительно, Sprite выполняет некоторую инициализацию, которая вам также понадобится в подклассе, а в Python вам нужно явно называть это.

Обычно, однако, вы могли бы сделать это с помощью вызова super:

super(Creep, self).__init__() 
+0

Хорошо. Я думаю, что у меня есть смутное представление о том, что происходит. Класс Creep также нуждается в доступе к некоторым переменным, содержащимся в вызове инициализации объекта Sprite? Простите меня, если мой жар немного не работает. Очень новый для программирования. –

Смежные вопросы