Когда параметр необходим после себя - PullRequest
0 голосов
/ 20 декабря 2018

Я новичок в Python, и у меня возник вопрос о классах.После создания класса, когда вы используете def init (self), когда необходимо иметь параметры после self.В некоторых пигмеях я видел, что иногда они включаются, а иногда нет, например, в приведенные ниже коды для настроек игры (Alien Invasion) и рисования корабля: я запутался, почему существует параметр экрана, который есть в основной программеопределение дисплея, а в настройках нет параметров.Пожалуйста, объясните, спасибо.

class Ship():
    def __init__(self, screen):

    # initializes the screen and set its starting postion
    self.screen = screen

    # now we load the image

    self.image = pygame.image.load("ship.bmp")
    self.rect = self.image.get_rect()
    self.screen_rect = screen.get_rect()

    # starting ship at each bottom of screen

    self.rect.centerx = self.screen_rect.centerx
    self.rect.bottom = self.screen_rect.bottom

def blitme(self):
    # drawing ship at its locations, use blitme
    self.screen.blit(self.image, self.rect)

class Settings():
    def __init__(self):
        self.screen_width = 1000
        self.screen_height = 700
        self.bg_color = (230, 230, 230)

Ответы [ 3 ]

0 голосов
/ 20 декабря 2018

Метод - это функция.Параметры функции являются необязательными.То, должна ли функция иметь параметр, зависит от предназначения функции.Каждая функция должна быть разработана для конкретной задачи;некоторым может потребоваться аргумент, другим - нет.

Объектно-ориентированное программирование на Python разработано таким образом, чтобы первым параметром методов был экземпляр, вызываемый методом на .Это позволяет вызывать метод так же, как обычную функцию.Использование self в отличие от this_class_instance - это просто соглашение, но вам следует придерживаться его для удобства чтения.

0 голосов
/ 20 декабря 2018

Я думаю, вы бы выиграли от простого примера.Подумайте о том, когда вы создаете экземпляр класса.Вам не нужно предоставлять никаких параметров, если вы просто оставляете конструктор класса как имеющий единственный аргумент 'self'.

my_dog = Dog()

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

class Dog(object):
    def __init__(self, name, barks, bites):
        self.name = name
        self.barks = barks
        self.bites = bites

Теперь, когда вы создаете экземпляр класса, вы указываете эти параметрыаванс:

my_dog = Dog('Rover', barks=True, bites=False)

Это означает, что вы контролируете, какую информацию необходимо передать при создании экземпляра вашего класса.В этом случае автор кода хочет, чтобы часть информации, относящаяся к «экрану», использовалась при создании экземпляра класса.Другие классы, которые вы пишете, могут не нуждаться в дополнительной информации, поэтому они просто используют 'self'.

Так же, как при написании функций, вы отвечаете за то, какие параметры они принимают, и это точно так же, как и с классами.

0 голосов
/ 20 декабря 2018
Параметр

после «self», такой как self.image, позволяет вам инициировать ваш объект «Ship» и использовать его вне класса.Он определяет атрибуты для характеристики вашего объекта. «Корабль». Он позволяет вам выполнять объектно-ориентированное программирование (ООП). Вы можете определить все атрибуты, которые вам нравятся:

self.speed = 10 

, если вы хотите инициировать скорость перемещения вашегоobject.

Вы можете проверить этот документ: class python

Но я думаю, что вы должны прочитать документацию по объектно-ориентированному программированию, чтобы понять всю концепцию.В программировании это очень и очень важно понимать.Не только для Python, но и для всех языков.(Java, C, C # ...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...