Поиск по сайту:

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


Введение

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

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

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

Одним из принципов разработки программного обеспечения является принцип DRY, который означает «не повторяйся». Этот принцип направлен на ограничение повторения в коде, а объектно-ориентированное программирование придерживается принципа DRY, поскольку он уменьшает избыточность.

Этот учебник продемонстрирует использование как переменных класса, так и переменных экземпляра в объектно-ориентированном программировании в Python.

Предпосылки

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

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

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

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

Информация: Чтобы следовать примеру кода в этом руководстве, откройте интерактивную оболочку 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)

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

  1. python shark.py
Output
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. В этой программе у нас есть строки и целое число. Давайте снова запустим программу с помощью команды python shark.py и просмотрим вывод:

Output
fish ocean 5

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

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

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

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

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

В приведенном ниже примере класса 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.

Давайте создадим еще один объект класса 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:

    # Class variables
    animal_type = "fish"
    location = "ocean"

    # Constructor method with instance variables name and age
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # Method with instance variable followers
    def set_followers(self, followers):
        print("This user has " + str(followers) + " followers")


def main():
    # First object, set up instance variables of constructor method
    sammy = Shark("Sammy", 5)

    # Print out instance variable name
    print(sammy.name)

    # Print out class variable location
    print(sammy.location)

    # Second object
    stevie = Shark("Stevie", 8)

    # Print out instance variable name
    print(stevie.name)

    # Use set_followers method and pass followers instance variable
    stevie.set_followers(77)

    # Print out class variable 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, чтобы уменьшить количество повторений в коде.