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

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

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

Если какая-либо переменная будет иметь одно и то же значение во всех объектах программы, её можно определить на уровне класса. Если значение переменной будет изменяться в зависимости от объекта, такую переменную нужно определить на уровне экземпляра (объекта).

DRY (don’t repeat yourself, рус. не повторяйся) – это принцип программирования, который подразумевает снижение повторений кода в рамках программы.

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

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

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

Переменная класса, определяемая вне метода, как правило, пишется под заголовком класса и перед методом конструктора и другими методами.

Переменная класса выглядит так:

class Shark: animal_type = "fish"

Создайте тестовую программу shark.py. В этом файле можно создать экземпляр класса 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, переменные класса могут содержать любой тип данных. В данной программе переменные будут содержать строки и целые числа.

Снова запустите программу:

На экране появится:

Объект 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("Wally", 5)

Как и переменные класса, объектные переменные можно отобразить:

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

python shark.py Wally 5

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

Создайте ещё один объект класса Shark (например, stevie):

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

Объект stevie, как и объект new_shark, передает индивидуальные параметры экземпляра класса 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(): # Первый объект определяет объектные переменные метода конструктора wally = Shark("Wally", 5) # Отображение объектной переменной name print(wally.name) # Отображение переменной класса location print(wally.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()

Вы получите такой результат:

Wally ocean Stevie This user has 77 followers fish

Заключение

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

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

Это позволяет разрабатывать программы по принципу DRY и уменьшить повторение кода.

📎📎📎📎📎📎📎📎📎📎