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

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

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

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

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

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

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

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

Читайте также: Создание классов и определение объектов в Python 3

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

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

Читайте также: Типы данных в Python 3

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

python shark.py

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

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("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.

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

Работа с переменными класса и объекта

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

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():
# Первый объект определяет объектные переменные метода конструктора
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()

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

python shark.py

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

Wally
ocean
Stevie
This user has 77 followers
fish

Заключение

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

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

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

Tags: , ,

Добавить комментарий