* Перегрузка операторов (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") # Увеличиваем количество людей перевезенных ЭТИМ лифтом self.people_lifted += 1 # Увеличиваем количество людей перевезенных ВСЕМИ лифтами Elevator.people_lifted +=1
# Метод печатающий информацию о конкретном лифте def info(self): print (self.name, "lifted", self.people_lifted, "people out of", Elevator.people_lifted)
| elevator_1 = Elevator("OTIS")
| elevator_2 = Elevator("PHILLIPS")
| # Везем человека в лифте под именем OTIS
| elevator_1.lift()
| # Везем двоих человек в лифте под именем PHILLIPS
| elevator_2.lift()elevator_2.lift()
| # Получаем информацию по лифту под именем OTIS
| elevator_1.info()
| # Получаем информацию по лифту под именем PHILLIPS
| elevator_2.info()
Соединив все это в одном файле, получим следующее:
Углубленные темы объектно-ориентированного программирования, которые мы еще рассмотрим:
Наследование в Python.
Перегрузка методов в Python.
Перегрузка операторов в Python.
Сокрытие данных класса в Python.
Принципы ООП.
Модули в Python
Система модулей позволяет вам логически организовать ваш код на Python. Группирование кода в модули значительно облегчает процесс написания и понимания программы. Говоря простым языком, модуль в Python это просто файл, содержащий код на Python. Каждый модуль в Python может содержать переменные, объявления классов и функций. Кроме того, в модуле может находиться исполняемый код.
| import module_1[, module_2[,... module_N]
Когда интерпретатор Python встречает команду import, он импортирует (дает доступ) этот модуль, если он присутствует в пути поиска Python. Путь поиска Python это список директорий, в которых интерпретатор производит поиск перед попыткой загрузить модуль. Например, чтобы использовать модуль math следует написать:
| import math
| # Используем функцию sqrt из модуля math
| print (math.sqrt(9))
| # Печатаем значение переменной pi, определенной в math
| print (math.pi)
Важно знать, что модуль загружается лишь однажды, независимо от того, сколько раз он был импортирован. Это препятствует цикличному выполнению содержимого модуля.
| # Импортируем из модуля math функцию sqrt
| from math import sqrt
| # Выводим результат выполнения функции sqrt.
| # Обратите внимание, что нам больше незачем указывать имя модуля
| print (sqrt(144))
|
| # Но мы уже не можем получить из модуля то, что не импортировали
| print (pi) # Выдаст ошибку
Выражение from ... import не импортирует весь модуль, а только предоставляет доступ к конкретным объектам, которые мы указали.
| from math import *
| # Теперь у нас есть доступ ко всем функция и переменным, определенным в модуле math
|
| print (sqrt(121))
| print (pi)
| print (e)
Однако это конструкцию следует использовать с осторожностью, поскольку при импортировании нескольких модулей можно запутаться в своем собственном коде.
1. Директория, в которой находится файл, в котором вызывается команда импорта
2. Если модуль не найден, Python ищет в каждой директории, определенной в консольной переменной PYTHONPATH.
3. Если и там модуль не найден, Python проверяет путь заданный по умолчанию
*
Путь поиска модулей сохранен в системном модуле sys в переменной path. Переменная sys.path содержит все три вышеописанных места поиска модулей.
| help("modules")
Через несколько секунд вы получите список всех доступных модулей.
| def hello():
| print ("Hello from module_1")
А во втором вызовем эту функцию:
| from module_1 import hello
|
| hello()
Выполнив код второго файла получим:
Hello from module_1
| # на данный момент нам доступны лишь встроенные функции
| dir()
| # импортируем модуль math
| import math
| # теперь модуль math в списке доступных имен
| dir()
| # получим имена, определенные в модуле math
| dir(math)
* Первый уровень это обычные команды на Python.
* Команды на Python могут быть собраны в функции.
* Функции могут быть частью класса.
* Классы могут быть определены внутри модулей.
* Наконец, модули могут составляться в пакеты модулей.