- Переменные экземпляра класса python
- Терминология объектно-ориентированного программирования:
- Создание класса в Python:
- Создание экземпляров класса:
- Получение доступа к атрибутам и методам класса:
- Переменные класса и экземпляра в Python
- Для начала
- Переменные класса в Python
- Переменные экземпляра класса в Python
- Работа с переменными класса и экземпляра одновременно
- Заключение
Переменные экземпляра класса python
- Python — Обзор
- Основы синтаксиса Python
- Операторы в Python
- Типы данных в Python
- Условные конструкторы в Python
- Циклы в Python
- Функции в Python
- Функциональное программирование в Python
- ООП в Python
- Модули в Python
- Работа с файлами в Python
- Обработка исключительных ситуаций в Python
Объектно-ориентированным программированием называется такой подход к программированию, в котором используются понятия класса и объекта. Говоря проще, когда перед нами стоит задача запрограммировать какой-либо объект, то намного легче сделать это описав этот объект, чем написав ряд функций.
Терминология объектно-ориентированного программирования:
- Класс (Class): Определенный программистом прототип программируемого объекта с набором атрибутов (переменных и методов), которые описывают данный объект. Доступ к аттрибутам и методам осуществляется через точку
- Переменная класса (Class variable): Переменная, доступная для всех экземпляров данного класса. Определяется внутри класса, но вне любых методов класса.
- Экземпляр класса (Instance): Отдельный объект-представитель определенного класса.
- Переменная экземпляра класса (Instance variable): Переменная определенная внутри медота класса, принадлежащая только к этому классу.
- Метод (Method): Особая функция, определенная внутри класса.
- Наследование (Inheritance): Передача аттрибутов и методов родительского класса дочерним классам.
- Перегрузка функций (Function overloading): Изменение работы метода, унаследованного дочерним классом от родительского класса.
- Перегрузка операторов (Operator overloading): Определение работы операторов с экземплярами данного класса.
Создание класса в Python:
Определение класса начинается с ключевого слова class, после него следует имя класса и двоеточие. Теперь с отступом можно описывать сам класс.
class Elevator: """ Simple elevator class """ # Переменная класса. Сколько людей было перевезено ВСЕМИ лифтами people_lifted = 0 # Конструктор класса. Вызывается при создании экземпляра класса def __init__(self,name): self.name = name # переменная экземпляра класса. Количество людей перевезенных КОНКРЕТНЫМ лифтом self.people_lifted = 0 # Метод перевозки людей def lift(self): print ("<> lifted someone".format(self.name)) # Увеличиваем количество людей перевезенных ЭТИМ лифтом self.people_lifted += 1 # Увеличиваем количество людей перевезенных ВСЕМИ лифтами Elevator.people_lifted += 1 # Метод печатающий информацию о конкретном лифте def info(self): print (self.name, "lifted", self.people_lifted, "people out of", Elevator.people_lifted)
Создание экземпляров класса:
Чтобы создать экземпляр класса следует любой переменной присвоить значение имени класса, указав в скобках аргументы, которые принимает метод __init__().
elevator_1 = Elevator("OTIS") elevator_2 = Elevator("PHILLIPS")
Получение доступа к атрибутам и методам класса:
Чтобы получить доступ к атрибутам класса в Python следует после объекта поставить точку и написать имя переменной или метода, которые вы хотите использовать:
# Везем человека в лифте под именем OTIS elevator_1.lift() # Везем двоих человек в лифте под именем PHILLIPS elevator_2.lift() elevator_2.lift() # Получаем информацию по лифту под именем OTIS elevator_1.info() # Получаем информацию по лифту под именем PHILLIPS elevator_2.info()
Соединив все это в одном файле, получим следующее:
Углубленные темы объектно-ориентированного программирования, которые мы еще рассмотрим:
Сокрытие данных класса в Python.
Принципы ООП.
Переменные класса и экземпляра в 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)
И получим следующий результат:
Программа возвращает значение нашей переменной.
Теперь давайте добавим ещё несколько переменных класса и выведем их:
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 и просмотрим на результат:
Экземпляр 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 , мы получим следующий вывод:
Полученный нами вывод состоит из значений переменных, которые мы инициализировали для экземпляра 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: # Переменные класса 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. Рекомендуем также почитать статью «Чем отличаются методы класса, статические и «простые» методы».