Python Forum

Full Version: Beginning PyGame question about "self"
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hello I am not sure how to really question my question if that makes sense. I am following metulburr's pygame tutorial and something I don't really understand is why when I make a class I have self. I have my example below but if someone could explain what self.*** actually does or clarify it simply that would help, also I see under the player class "def __init__" a lot why is __init__ commonly used?

class player:
    def __init__(self, screen_rect):
        self.image = pg.image.load('spaceship.png').contert()
        self.image.set_colorkey((255,0,255))
        self.rect = self.image.get_rect(center = screen_rect.center)

    def draw(self, surf):
        surf.blit(self.image, self.rect)
self refers to the object. Without self they are local variables that disappear when method is returned.

__init__ is just a constructor. Player() = Player.__init__() .
self is required in instance methods which pertain to editing the object. Without self as the first argument, its just a class method, which does not pertain to the object.

When you assign something to self.var such as
self.image = pg.image.load('spaceship.png').contert()
self.image is a class attribute. Each object is going to have a separate copy. Which doesnt matter here as there is only one player. But you can use self.image in any class method in that class without passing argumetns back and forth....or using global keywords, etc. You can also call that attribute by the object via player.image

the dunder init method (or constructor) is the method that gets executed automatically when the object is created.
So doing
player = Player(my_args)
runs the dunder init method.