Оглавление

В оглавлении перечислены только уже опубликованные разделы.

Python

Общие вопросы по языку

Разница 2 и 3 версии python


В Python 2 print был оператором: print "Hello, world"
В Python 3 print - функция: print ("Hello, world")

В Python 2 были две функции: range - возвращает список; xrange - возвращает итератор
В Python 3 есть только функция range, и она возвращает итератор

В Python 2 при делении целых чисел возвращает целоче число
В Python 3 при делении целых чисел возвращает вещественное число

Магические методы

Так как в Питоне 3 различий между строкой и юникодом больше нет, __unicode__ исчез, а появился __bytes__ (который ведёт себя так же как __str__ и __unicode__ в 2.7) для новых встроенных функций построения байтовых массивов.

Так как деление в Питоне 3 теперь по-умолчанию «правильное деление», __div__ больше нет.

__coerce__ больше нет, из-за избыточности и странного поведения.

__cmp__ больше нет, из-за избыточности.

__nonzero__ было переименовано в __bool__ .

next у итераторов был переименован в __next__ .

ООП

SOLID

S - Принцип единственной ответственности (single responsibility principle)
Для каждого класса должно быть определено единственное назначение. Не должно возникать God object, который занимается всем в программе.

O - Принцип открытости/закрытости (open–closed principle)
«программные сущности … должны быть открыты для расширения, но закрыты для модификации». Мы должны иметь возможность добавлять функциональность.

L - Принцип подстановки Барбары Лисков (Liskov substitution principle)
«объекты в программе должны быть заменяемыми на экземпляры их подтипов без изменения правильности выполнения программы». У объекта есть тип, но сами классы выстраиваются в иерархию классов. Подтип типа всю старую функциональность должен выполнять.

I - Принцип разделения интерфейса (interface segregation principle)
«много интерфейсов, специально предназначенных для клиентов, лучше, чем один интерфейс общего назначения». Интерфейс - способ провзаимодействовать с какой-то программной действующей функцией.

D - Принцип инверсии зависимостей (dependency inversion principle) «Зависимость на Абстракциях. Нет зависимости на что-то конкретное».

Что такое классы

Класс — тип, описывающий устройство объектов. Объект — это экземпляр класса.
class C: 
      pass 
      имя_объекта = имя_класса()
У класса может не быть тела. Простейший пример класса:
class Rectangle:
      default_color = "green" # статический атрибут 
      def __init__(self, width, height): # конструктор класса
      self.width = width # динамический атрибут
      self.height = height # динамический атрибут
В python нет возможности сделать несколько конструкторов.

Что такое магические методы

Если какой-то идентификатор начинается с двух подчёркиваний, дальше пишется что-либо, потом снова два подчёркивания, то это спец метод.

Какие магические методы и для чего используются?

class FileObject:
      def __init__(self, filepath='~', filename='sample.txt'): # Обёртка для файлового объекта, чтобы быть уверенным в том, что файл будет закрыт при удалении.
      self.file = open(join(filepath, filename), 'r+') # Открыть файл filename в filepath в режиме чтения и записи
      def __del__(self):
      self.file.close()
      del self.file

Метод, который будет вызван при инициализации объекта.
Это первый метод, который будет вызван при инициализации объекта. Он принимает в качестве параметров класс и потом любые другие аргументы, которые будут переданы в __init__ . __new__ используется весьма редко, но иногда бывает полезен, в частности, когда класс наследуется от неизменяемого (immutable) типа, такого как кортеж (tuple) или строка.

__new__(cls, [...])
Инициализатор класса. Самый базовый магический метод, __init__ . С его помощью мы можем инициализировать объект.
__init__(self, [...])
Деструктор объекта
__del__

Самый базовый из методов сравнения __cmp__(self, other) . Он, в действительности, определяет поведение для всех операторов сравнения (>, ==, !=, итд.), но не всегда так, как вам это нужно (например, если эквивалентность двух экземпляров определяется по одному критерию, а то что один больше другого по какому-нибудь другому). __cmp__ должен вернуть отрицательное число, если self < other , ноль, если self == other , и положительное число в случае self > other . Но, обычно, лучше определить каждое сравнение, которое вам нужно, чем определять их всех в __cmp__ . Но __cmp__ может быть хорошим способом избежать повторений и увеличить ясность, когда все необходимые сравнения оперируют одним критерием.

Унарные операторы и функции

Унарные операторы и функции имеют только один операнд — отрицание, абсолютное значение, и так далее.

Обычные арифметические операторы

Магические методы преобразования типов

В Питоне множество магических методов, предназначенных для определения поведения для встроенных функций преобразования типов.

Представление своих классов

Часто бывает полезно представление класса в виде строки. В Питоне существует несколько методов, которые вы можете определить для настройки поведения встроенных функций при представлении вашего класса.

Магия контейнеров

Магические методы, используемые контейнерами.

Построение дескрипторов

Дескрипторы — это такие классы, с помощью которых можно добавить свою логику к событиям доступа (получение, изменение, удаление) к атрибутам других объектов. Дескрипторы не подразумевается использовать сами по себе; скорее, предполагается, что ими будут владеть какие-нибудь связанные с ними классы. Дескрипторы могут быть полезны для построения объектно-ориентированных баз данных или классов, чьи атрибуты зависят друг от друга. В частности, дескрипторы полезны при представлении атрибутов в нескольких системах исчисления или каких-либо вычисляемых атрибутов (как расстояние от начальной точки до представленной атрибутом точки на сетке).
Чтобы класс стал дескриптором, он должен реализовать по крайней мере один метод из
__get__, __set__ или __delete__. Вверх Вниз