Параметр self
Часть раздела Object Oriented Programming путешествия по Python на Coddy — урок 4 из 64.
Параметр self ссылается на экземпляр класса внутри методов. Он позволяет получать доступ к атрибутам текущего объекта и изменять их.
Вот пример класса с методами, использующими self:
class Car:
def honk(self):
print("Beep beep!")
def describe(self):
print(f"I am a {self.color} {self.model}")Параметр self всегда должен быть первым параметром в определениях методов. Он сообщает методу, какой именно объект используется.
Создайте объект автомобиля и добавьте атрибуты:
my_car = Car()
my_car.color = "Red"
my_car.model = "Sedan"Теперь вызовите методы:
my_car.honk()
my_car.describe()Вывод:
Beep beep!
I am a Red SedanОбратите внимание, что при вызове my_car.describe(), вы ничего не передаете для self — Python автоматически передает my_car в качестве параметра self.
Вот что происходит за кулисами:
# Когда вы пишете это:
my_car.describe()
# Python на самом деле делает следующее:
Car.describe(my_car)Параметр self позволяет каждому объекту получать доступ к своим собственным данным. Без self методы не знали бы, атрибуты какого объекта использовать.
Ключевой момент: Всегда указывайте self в качестве первого параметра при определении методов, но никогда не передавайте его при вызове методов — Python делает это автоматически.
Задание
ЛегкоДополните класс Car в файле car.py, добавив метод с именем display_info, который использует параметр self для вывода года выпуска, марки и модели автомобиля в формате:
"This car is a [year] [make] [model]".
car.py: Содержит определение классаCar, в которое вы добавите методdisplay_infodriver.py: Основной файл выполнения, который импортирует и использует классCar
Файл driver.py импортирует ваш класс Car и создаст экземпляры для тестирования вашей реализации. Убедитесь, что ваш метод работает правильно при вызове из файла драйвера.
Шпаргалка
Параметр self ссылается на экземпляр класса внутри методов и позволяет вам получать доступ к атрибутам текущего объекта и изменять их.
self всегда должен быть первым параметром в определениях методов:
class Car:
def honk(self):
print("Beep beep!")
def describe(self):
print(f"I am a {self.color} {self.model}")Создайте объект и добавьте атрибуты:
my_car = Car()
my_car.color = "Red"
my_car.model = "Sedan"Вызывайте методы (Python автоматически передает объект в качестве self):
my_car.honk() # Beep beep!
my_car.describe() # I am a Red SedanКлючевой момент: всегда включайте self в качестве первого параметра в определениях методов, но никогда не передавайте его при вызове методов.
Попробуйте сами
from car import Car
# Проверьте свой код
my_car = Car()
my_car.year = 2020
my_car.make = "Toyota"
my_car.model = "Corolla"
my_car.display_info() # Должно вывести: This car is a 2020 Toyota CorollaВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Object Oriented Programming
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыПараметр selfМетодыАтрибутыМетод-конструктор (__init__)Повторение — Простой калькулятор4Наследование
Базовое наследованиеФункция super()Переопределение методовМножественное наследованиеПорядок разрешения методовИтоги — Иерархия сотрудников7Специальные методы
Введение в магические методыПерегрузка операторовМагические методы контейнеровПовторение — Пользовательский список10Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн ObserverПаттерн Strategy5Полиморфизм
Снова о переопределении методовУтиная типизацияАбстрактные классы и методыПроектирование интерфейсовИтоги — Калькулятор фигур8Продвинутые концепции ООП
Композиция против наследованияМиксиныСтатические методы и методы классаДекораторы классовМенеджеры контекста11Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн Компоновщик3Свойства классов
Переменные экземпляра и классаДекораторы свойствПриватные атрибутыИтоги — Менеджер банковского счета6Инкапсуляция
Public, Protected, Private члены классаМодификаторы доступаСокрытие данныхДекораторы property: продвинутый уровеньИтоги: Система учета студентов12Проект: Управление библиотекой
Обзор проектаКлассы Book и User