Параметр self
часто добавляется в методы автоматически IDE. Он в основном используется, когда метод содержится внутри класса.
Возьмем, к примеру, класс Book
ниже.
class Book:
author = ""
title = ""
def __init__(self, author, title):
self.author = author
self.title = title
def print_book_information(self):
print("'%s' by %s" % (self.title, self.author))
Поскольку вы только начинаете с ООП, многое из этого будет немного запутанным. Сначала мы объявляем тип класса Book.
class Book:
Следующие две строки объявляют переменные, связанные с классом Book. В этом случае мы хотим сохранить author
книги, а также title
книги.
author = ""
title = ""
Следующие две функции, если вы заметили, обе имеют параметр self
. Параметр self
ссылается на созданную вами книгу. так что если я создам книгу примерно так:
my_book = Book('Ayn Rand', 'Atlas Shrugged')
Он выполнит метод __init__
, который устанавливает значения author
и title
для нашей конкретной книги.
self.author = author # Sets our author to be 'Ayn Rand'
self.title = title # Sets our title to be 'Atlas Shrugged'
Теперь, когда наш класс создан, мы можем сделать что-то вроде
>>> my_book.print_book_information()
'Atlas Shrugged' by Ayn Rand
Обратите внимание на метод print_book_information
как мы используем слово self
для ссылки на нашего автора и название? self
по существу позволяет методу узнать, какую именно книгу вы просматриваете. В противном случае метод не будет знать, для какой книги вы хотите получить название или автора.
Кроме того, в вопросе вы отметили, что у вас очень мягкий фон Java. self
выполняет функцию, аналогичную ключевому слову this
из Java, за исключением того, что вы должны включить его в качестве параметра в Python, тогда как вы не ссылаетесь на него в параметрах в Java. Следующие два метода по сути одинаковы:
# Python
class Hello:
def say_hello(self):
print("Hello!")
// Java
public class Hello
{
public void say_hello()
{
System.out.println("Hello!");
}
}
Может быть опечатка или два в Java, не использовал его в течение последних 5 лет или около того.