Python-рецепты. Пакеты и ООП.


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

Организация python-пакетов

Пакетом в питоне называется группа модулей, объединенные по какому-либо признаку. Питоновские пакеты делать не удобно, а очень удобно: для этого создается каталог с именем пакета, например testpak, затем в него помещаются модули, которые нужно сгруппировать, например module1.py и module2.py, а так же инициализирующий модуль __init__.py, который «сообщает» интерпретатору python, что каталог в котором он находится является пакетом. Допустим в модуле module1.py определена функция func(). Следующий фрагмент кода показывает как получить к ней доступ.

# импортируем необходимый модуль из пакета
# и задаем для него псевдоним - mod
import testpak.module1 as mod

# вызываем требуемую функцию
mod.func()

Пакеты могут быть вложенными. Так что если бы функция func() была бы определена в модуле module3.py пакета podpaket, сохраненного в свою очередь в каталоге пакета testpak, то доступ к ней осуществлялся бы следующим образом:

# импортируем необходимый модуль из пакета
# и задаем для него псевдоним - mod
import testpak.podpaket.module3 as mod

# вызываем требуемую функцию
mod.func()

Организация пакетов:

ООП и python

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

# -*- coding: utf-8

# класс автомобиля auto
class auto(object):
    # функция инициализации объекта класса (заодно передаем параметры)
    # ключевое слово self указывает на экземпляр объекта
    # и всегда передается первым как параметр
    def __init__(self, rate=10, volume=40):
        # свойство обекта - расход топлива
        self.rate = rate
        # свойство объекта - емкость бака
        self.volume = volume
        # сколько бензина
        self.petrol = 0
        # для демонстрации выводим параметры
        print "Параметры автомобиля:"
        print "Расход", self.rate, "литров на сотку"
        print "Бензобак -", self.volume, "литров"
        print "----------------------------------"

    # процедура наполнения бака
    def fill(self, add_petrol):
        self.petrol += add_petrol
        if self.petrol > self.volume:
            print "В бак не поместилось ", self.petrol - self.volume, "литров"
            self.petrol = self.volume
        else:
            print "Успешно залито", add_petrol, "литров бензина"

    # процедура поездки
    # в качестве параметра передаем сколько нужно проехать
    def ride(self, lenght=100):
        maxride = self.petrol * 100 / self.rate
        if maxride >= lenght:
            spend = self.rate * lenght / 100
            self.petrol -= spend
            print "Проехали", lenght,"км"
        else:
            print "не доедем!"

    # сколько бензина осталось?
    def petrol_level(self):
        print "В баке", self.petrol, "литров"

# машина с параметрами по умолчанию
x = auto()

print " -> смотрим в бензобак"
x.petrol_level()
print " -> пробуем проехать 5 км с пустым баком"
x.ride(5)
print " -> заправляем 20 литров"
x.fill(20)
print " -> заправляем еще 30"
x.fill(30)
print " -> едем на дачу (220 км)"
x.ride(220)
print " -> едем обратно (тоже 220 км)"
x.ride(220)
print "-> а можно посмотреть в бензобак так:"
print x.petrol
print "-> и изменить его"
x.petrol += 20
x.petrol_level()

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

, ,



  1. #1 by Maxim Penzin on 31 Июль 2010 - 18:23

    Важность ООП в чистом виде на самом деле сильно преувеличена. Понятно, что основные идеи его весьма полезно знать и уметь применять, но это лишь малая часть.

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

  2. #2 by Александр on 16 Декабрь 2015 - 23:14

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

(никто не узнает)