Абстрактные методы в Python
Абстрактные методы содержат только определение метода без реализации. Предполагается, что класс-потомок должен переопределить метод и реализовать его функциональность. Чтобы такое предположение сделать более очевидным, часто внутри абстрактного метода возбуждают исключение.
Абстрактные методы
class Class1(object):
def test(self, x): # Абстрактный метод
# Возбуждаем исключение с помощью raise
raise NotImplementedError("Необходимо переопределить метод")
class Class2(Class1): # Наследуем абстрактный метод
def test(self, x): # Переопределяем метод
print x
class Class3(Class1): # Класс не переопределяет метод
pass
c2 = Class2()
c2.test(50) # Выведет: 50
c3 = Class3()
try: # Перехватываем исключения
c3.test(50) # Ошибка. Метод test() не переопределен
except NotImplementedError, msg:
print msg # Выведет: Необходимо переопределить метод
Далее...
Статические методы и методы класса
Внутри класса можно создать метод, который будет доступен без создания экземпляра класса. Для этого перед определением метода внутри класса следует указать декоратор @staticmethod. Вызов статического метода без создания экземпляра класса осуществляется следующим образом:
<Название класса>.<Название метода>(<Параметры>)Кроме того, можно вызвать статический метод через экземпляр класса:
<Экземпляр класса>.<Название метода>(<Параметры>)Пример использования статических методов вриведен ниже.
class Class1(object):
@staticmethod
def sum1(x, y): # Статический метод
return x + y
def sum2(self, x, y): # Обычный метод в классе
return x + y
def sum3(self, x, y):
return Class1.sum1(x, y) # Вызов из метода класса
print Class1.sum1(10, 20) # Вызываем статический метод
c1 = Class1()
print c1.sum2(15, 6) # Вызываем метод класса
print c1.sum1(50, 12) # Вызываем статический метод
# через экземпляр класса
print c1.sum3(23, 5) # Вызываем статический метод
# внутри класса
Далее...
Классы нового стиля. ООП в Python
Начиная с Python 2.2, помимо классических классов существует классы так называемого нового стиля. Классом нового стиля называется класс, у которого базовым классом является встроенный объект (например, list или dict) или объект object. Для классов старого и нового стили отличаются результатом выполнения функции type(), а также вывод атрибутов __class__ и __bases__ для экземпляров классов.
Классы нового стиля
class Class1: # Классический класс
pass
class Class2(object): # Класс нового стиля
pass
class Class3(list): # Класс нового стиля
pass
print type(Class1) # Выведет:
print type(Class2) # Выведет:
print type(Class3) # Выведет:
# __bases__ содержит кортеж с базовыми классами
print Class1.__bases__ # Выведет: ()
print Class2.__bases__ # Выведет: (,)
print Class3.__bases__ # Выведет: (,)
c1, c2, c3 = Class1(), Class2(), Class3()
print c1.__class__ # Выведет: __main__.Class1
print c2.__class__ # Выведет:
print c3.__class__ # Выведет:
print type(c1) # Выведет:
print type(c2) # Выведет:
print type(c3) # Выведет:
Далее...
Множественное наследование в Python
В определенных классах в круглых скобках можно указать сразу несколько базовых классов через запятую. В этом случае поиск идентификаторов производится вначале в производном классе, затем в базовом классе, расположенном первым в списке, далее просматриваются все базовые классы базового класса. Только после этого просматривается базовый класс, расположенный в списке правее, и все его базовые классы. Список базовых классов просматривается слева направо. Результатом поиска будет первый найденный идентификатор. Рассмотрим множественное наследование на примере.
Множественное наследование
class Class1: # Базовый класс для класса Class2
def f_func1(self):
print "Метод f_func1() класса Class1"
class Class2(Class1): # Класс Class2 наследует класс Class1
def f_func2(self):
print "Метод f_func2() класса Class2"
class Class3(Class1): # Класс Class3 наследует класс Class1
def f_func1(self):
print "Метод f_func1() класса Class3"
def f_func2(self):
print "Метод f_func2() класса Class3"
def f_func3(self):
print "Метод f_func3() класса Class3"
def f_func4(self):
print "Метод f_func4() класса Class3"
class Class4(Class2, Class3): # Множественное наследование
def f_func4(self):
print "Метод f_func4() класса Class4"
c1 = Class4() # Создаем экземпляр класса Class4
c1.f_func1() # Выведет: Метод f_func1() класса Class1
c1.f_func2() # Выведет: Метод f_func2() класса Class2
c1.f_func3() # Выведет: Метод f_func3() класса Class3
c1.f_func4() # Выведет: Метод f_func4() класса Class4
Далее...
Наследование. Объектно-ориентированное программирование в Python
Наследование в Python является важным фактором для понимания принципа работы ООП. Предположим, у вас есть класс (Пример Class1). При помощи наследования мы можем создать новый класс (Например Class2), в котором будет доступ ко всем атрибутам и методам класса Class1, а также к некоторым атрибутам и методам.
Наследование
# -*- coding: utf-8 -*-
class Class1: # Базовый класс
def f_func1(self):
print "Метод f_func1() класса Class1"
def f_func2(self):
print "Метод f_func2() класса Class1"
class Class2(Class1): # Класс Class2 наследует класс Class1
def f_func3(self):
print "Метод f_func3() класса Class2"
c1 = Class2() # Создаем экземпляр класса Class2
c1.f_func1() # Выведет: Метод f_func1() класса Class1
c1.f_func2() # Выведет: Метод f_func2() класса Class1
c1.f_func3() # Выведет: Метод f_func3() класса Class2
Как видно из примера, класс Class1 указывается внутри круглых скобок в определение класса Class2. Таким образом, класс Class2 наследует все атрибуты и методы класса Class1. Класс Class1 вызывется базовым классом ими суперклассом, а класс Class2 - производным классом или подклассом.
Объектно-ориентированное программирование. Методы __init__() и __del__() в Python
При создании экземпляра класса интерпретатор автоматически вызывает метод инициализации __init__(). В некоторых языках программирования данные методы принято называть конструктором и деструктором класса. В языке программирования PHP это будет __construct(); __destruct(). Формат метода:
def __init__(self[, <Значение1>[, <ЗначениеN>]]):
<Выражение>
С помощью метода __init__() можно присвоить значения по умолчанию для атрибутах класса. При создании экземпляра класса начальные значения указываются после имени класса в круглых скобках:
<Экземпляр класса> = <Имя класса>(<Значение1>[, ..., <ЗначениеN>])
Пример использования метода __init__() приведен ниже:
# -*- coding: utf-8 -*-
class HexColor:
def __init__(self):
self.colors = {
'red' : '#ff0000',
'greed' : '#7cfc00',
'blue' : '#4169e1'
}
hex_color = HexColor()
print hex_color.colors['red'] # Получим: #ff0000
# Пример 2: Удваиваем число
class DoubleMe:
def __init__(self, number):
self.result = number * 2
Double = DoubleMe(2)
print Double.result # Получим 4
Далее...
Алгоритм расшифровки названии автомобилей в игре "Что за тачка?" на Python
Вчера знакомый в ВК дал мне запрос чтобы заправить его автомобиль, чтобы тот мог продолжить играть. Я не любитель онлайн игр из за быстрого привыкания к ним и стараюсь чтобы не зависать долго в них. Хотя, в какую игру бы не играл всегда ищу какой-то способ чтобы упростить для себя процесс и догнать всех по достижениям в ней. Автолюбителям понравится данная игра, но загвоздка в том, что популярные марки там редкость. Даже если и будет BMW или Mercedes-Benz то он напомнит вам фильмы из 60-х годов.
Игра становится все более популярной, уже созданы группы с фотографиями с просьбой о помощи угадать название машины. Если замедлить с ответом то очки выигрыша будут меньше и тогда не будет денег, чтобы купить топливо на следующий круг. Изначально некоторые машины я угадывал при помощи Google Images, там есть возможность дать ссылку на автомобиль и получить результаты поиска. Но, даже гугл иногда не знал, что это за тачка.
Алгоритм работы программы
- Искал в интернете список всех автомобильных марок и сохранил их в текстовой файл.
- Задавал число букв из которых состоит название автомобиля.
- Вписывал случайные буквы которые дает нам игра для подбора.
- Алгоритм сортирует названия марок и выводит результат.
Ссылка на расшифровку названии онлайн ТУТ!
Взаимодействие с Интернетом. Разбор URL-адреса в Python
Интернет прочно вошел в нашу жизнь. Очень часто необходимо передать данные на Web-сервер или, наоборот, получить данные. Например, нужно получить котировку валют или прогноз погоды, проверить наличие писем в почтовом ящике. В состав стандартной библиотеке Python входит множество модулей, позволяющий работать практически со всеми протоколами Интернета.
Разбор URL-адреса
С помощью модуля urlparse можно манипулировать URL-адресом. Например, разобрать его на составляющие или получить абсолютный URL-адрес, указав базовый адрес и относительный. URL-адрес состоит из следующих элементов:
<Протокол>://<Домен>:<Порт>/<Путь>;<Параметры>?<Запрос>#<Якорь>Далее...
Запись данных в файл
Как осуществить чтение из файла мы обсудили в прошлой статье. В данной статье мы обсудим способы записи данных в файл. Чтобы не было ошибки из за доступа, убедитесь, что в папке где вы хотите выполнить изменения или сам файл имеют права 777.
Чтобы не соскучится, мы покажем несколько способов внесения данных в файл и наглядно увидим результат. Чтобы открыть файл для записи или же создать его, мы воспользуемся функцией open(filename, mod) и в качестве второго параметрам mod укажем значение w т.е. (write) запись. Если файл с указанным названием filename не существует - он будет создан.
Создаем новый файл в Python
# -*- coding: utf-8 -*-
my_file = open('snake.txt', 'w')
# Закрываем файл
my_file.close()
После выполнения данного скрипта, по указанному нами пути будет создан новый файл snake.txt если файл не был создан то нужно проверить права доступа на папку. Стоит учесть, что если файл snake.txt существовал ранее, то после открытия его функцией open() и мод W, тогда содержимое файла удаляется. Если вы хотите добавить что-то в конце, то следует использовать мод 'a+'.
Запись данных в файл Python
Предположим, что мы создали новый файл и хотим в него внести некий текст, для этого воспользуемся методом write().
# -*- coding: utf-8 -*-
my_file = open('snake.txt', 'w')
text_for_file = 'Some text here...'
my_file.write(text_for_file)
my_file.close()
Далее...
Создание скриншотов на Python с помощью библиотеки PIL
Библиотека PIL в операционной системе Windows позволяет сделать снимок экрана (скриншот). Можно получить как полную копию экрана, так и копию определенной прямоугольной области. Для получения копии экрана предназначена функция grab() из модуля ImageGrab. Формат функции:
grab([<Координаты прямоугольной области>])
Если параметр не указан, то возвращается полная копия экрана в виде объекта изображения в режиме RGB. Для получения только определенной области необходимо указать координаты прямоугольника: левого верхнего угла и правого нижнего угла. Пример создания скриншотов приведен ниже.