Share This
Связаться со мной
Крути в низ
Categories
//Переменные класса и экземпляра в Python

Переменные класса и экземпляра в Python

05.09.2021Category : Python

В этой статье мы расскажем про переменные класса и экземпляра в Python. Мы разберем, чем они отличаются и как с ними работать.

Объектно-ориентированное программирование позволяет использовать переменные на уровне класса или на уровне экземпляра класса. Переменные – это, по сути, символы, заменяющие значение, которое вы используете в программе.

На уровне класса переменные называются переменными класса, на уровне экземпляра – переменными экземпляра.

Когда мы ожидаем, что переменные будут общими для всех экземпляров класса или когда мы хотим инициализировать переменную, мы можем определить эту переменную на уровне класса. Если же мы ожидаем, что переменные будут значительно отличаться в разных экземплярах, мы можем определить их на уровне экземпляра класса.

Одним из принципов разработки программного обеспечения является принцип DRY (Don’t repeat yourself), который означает «Не повторяйся». Этот принцип направлен на ограничение повторов (дублирования) в коде. Объектно-ориентированное программирование придерживается принципа DRY, поскольку он снижает избыточность.

Для начала

У вас должен быть установлен Python 3 и настроена среда программирования на вашем компьютере или сервере, подходящая для вашей операционной системы (Ubuntu, CentOS, Debian и т.д.)

Переменные класса в Python

Переменные класса определяются в конструкторе класса. Поскольку они принадлежат самому классу, переменные класса разделяются всеми экземплярами класса. Поэтому они, как правило, будут иметь одинаковое значение для каждого экземпляра. Исключение — если вы используете переменную класса для инициализации переменной.

Переменные класса определяются вне всех методов. Обычно они размещаются прямо под заголовком класса, перед методом конструктора и другими методами.

Примечание. Чтобы следовать примерам кода в этом руководстве, откройте интерактивную оболочку Python в своей локальной системе, выполнив команду python3. Затем вы можете копировать, вставлять или редактировать примеры, добавляя код после символов >>>.

Сама по себе переменная класса выглядит следующим образом:

class Shark:     animal_type = "fish"

Здесь переменной animal_type присвоено значение «fish».

Мы можем создать экземпляр класса Shark (назовем его new_shark) и вывести переменную, используя точечную нотацию:

class Shark:     animal_type = "fish"  new_shark = Shark() print(new_shark.animal_type)

Запустим нашу программу:

$ python shark.py

И получим следующий результат:

fish

Программа возвращает значение нашей переменной.

Теперь давайте добавим ещё несколько переменных класса и выведем их:

class Shark:     animal_type = "fish"     location = "ocean"     followers = 5  new_shark = Shark() print(new_shark.animal_type) print(new_shark.location) print(new_shark.followers)

Как и любая другая переменная, переменные класса могут содержать данные любого типа (из доступных в Python). В этой программе есть строки (animal_type и location) и целое число (followers). Давайте снова запустим программу с помощью команды python shark.py и просмотрим на результат:

# Output fish ocean 5

Экземпляр new_shark имеет доступ ко всем переменным класса и может выводить их при запуске программы.

Переменные класса позволяют нам определять переменные при построении класса. Затем эти переменные и связанные с ними значения становятся доступными для каждого экземпляра класса.

Переменные экземпляра класса в Python

Переменные экземпляра принадлежат экземплярам класса. Это означает, что для каждого объекта или экземпляра класса переменные экземпляра различны.

В отличие от переменных класса, переменные экземпляра определяются внутри методов.

Например, в приведенном ниже коде переменные класса Shark name и age являются переменными экземпляра:

class Shark:     def __init__(self, name, age):         self.name = name         self.age = age

При создании объекта класса Shark нам нужно определить эти переменные, которые передаются как параметры в методе конструктора или другом методе.

class Shark:     def __init__(self, name, age):         self.name = name         self.age = age  new_shark = Shark("Sammy", 5)

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

class Shark:     def __init__(self, name, age):         self.name = name         self.age = age  new_shark = Shark("Sammy", 5) print(new_shark.name) print(new_shark.age)

Когда мы запустим указанную выше программу, используя python shark.py, мы получим следующий вывод:

# Output Sammy 5

Полученный нами вывод состоит из значений переменных, которые мы инициализировали для экземпляра new_shark.

peremennye klassa i ekzempljara v python b4fb570 - Переменные класса и экземпляра в Python

Марк Лутц «Изучаем Python»

Скачивайте книгу у нас в телеграм

Скачать ×

Давайте создадим еще один объект класса Shark под названием stevie:

class Shark:     def __init__(self, name, age):         self.name = name         self.age = age  new_shark = Shark("Sammy", 5) print(new_shark.name) print(new_shark.age)  stevie = Shark("Stevie", 8) print(stevie.name) print(stevie.age)  # Output: # Sammy # 5 # Stevie # 8

Объект stevie, как и объект new_shark, передает параметры, специфичные для данного конкретного экземпляра класса Shark, чтобы присвоить значения переменным экземпляра.

То есть переменные экземпляра, принадлежащие объектам класса, позволяют каждому объекту или экземпляру иметь разные значения, присвоенные этим переменным.

Работа с переменными класса и экземпляра одновременно

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

class Shark:      # Переменные класса     animal_type = "fish"     location = "ocean"      # Метод-конструктор с переменными экземпляра name и age     def __init__(self, name, age):         self.name = name         self.age = age      # Метод с переменной экземпляра followers     def set_followers(self, followers):         print("This user has " + str(followers) + " followers")   def main():     # Первый объект. Установка переменных экземпляра метода-конструктора     sammy = Shark("Sammy", 5)      # Вывод переменной экземпляра name     print(sammy.name)      # Вывод переменной класса location     print(sammy.location)      # Второй объект     stevie = Shark("Stevie", 8)      # Вывод переменной экземпляра name     print(stevie.name)      # Использование метода set_followers и передача переменной экземпляра followers     stevie.set_followers(77)      # Вывод переменной класса animal_type     print(stevie.animal_type)  if __name__ == "__main__":     main()

Когда мы запустим программу, используя python shark.py, мы получим следующий результат:

# Output Sammy ocean Stevie This user has 77 followers fish

Здесь мы использовали переменные класса и экземпляра в двух объектах класса Shark: sammy и stevie.

Заключение

В объектно-ориентированном программировании переменные на уровне класса называются переменными класса, а на уровне объекта – переменными экземпляра класса.

Это различие позволяет нам использовать переменные класса для инициализации объектов с определенным значением, присвоенным переменным, а переменные экземпляра — чтобы каждый объект мог иметь свои переменные.

Использование переменных, относящихся к классу или экземпляру, помогает придерживаться принципа DRY. То есть способствует уменьшению повторов в коде.

От редакции Pythonist. Рекомендуем также почитать статью «Чем отличаются методы класса, статические и «простые» методы».

Перевод статьи «Understanding Class and Instance Variables in Python 3».

peremennye klassa i ekzempljara v python f2cfa6d - Переменные класса и экземпляра в Python

Марк Лутц «Изучаем Python»

Скачивайте книгу у нас в телеграм

Скачать ×

  • 0 views
  • 0 Comment

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

© Speccy 2020 / All rights reserved

Связаться со мной
Close