Класс Position.
Класс не является наследником какого-либо класса. Строка "class Position" создаёт объект типа "класс" (class object,
http://docs.python.org/ref/class.html). В объекте типа "класс" заводится словарь (dictionary), в котором хранятся статические переменные класса и методы.
Последующие строки идут с отступом, это означает, что объекты, которые они определяют, включаются в структуру класса Position.
Строка "counter = 0" создаёт статическую переменную с именем counter класса Position и инициализирует её нулём.
Строка "positions = set()" создаёт статическую переменную с именем positions класса Position и инициализирует её пустым множеством.
В питоне методы являются обычными функциями, поэтому в каждый метод должна передаваться явная ссылка на объект, метод которого вызван. То есть, если вы хотите, чтобы ваш метод вызывался как obj.meth(), то метод надо описывать как "def meth(self):"
Метод со специальным именем __init__ вызывается при создании объекта класса Position. Это аналог конструкторов в обычных ОО языках.
Объекты в Python создаются так: ИмяКласса(аргумент1, аргумент2, ..., аргумент_n). К списку аргументов, следующих после ИмяКласса, будет спереди приделана ссылка на инициализируемый объект и полученный список будет передан в метод __init__. В конце вашего файла есть пример " assistant = Position('ассистент')" . При выполнении этого выражения будет создан объект Position, и будет вызван метод
Position.__init__(ссылка_на_новый_объект, 'ассистент').
Метод со специальным именем __hash__ используется для вычисления хэш-кода объекта.
Метод __init__ класса Position. Последующие строки идут с отступом, это означает, что они составляют тело метода.
"Position.counter += 1" -- статическая переменная counter класса Position увеличивается на 1. Судя по коду, эта переменная используется для подсчёта числа созданных позиций.
"self.code = Position.counter" - с каждым объектом связан словарь (dictionary), в котором хранятся переменные объекта. В языке питон не надо декларировать поля объекта заранее. Переменная создаётся автоматически при первом присваивании. в данном случае переменная code текущего объекта будет создана и ей будет присвоено значение Position.counter
"self.name = name" - создаётся поле объекта с именем name и приравнивается одноимённому аргументу конструктора.
"Position.positions.add(self)" - новосозданный объект класса Position (переменная self) заносится (метод add) во множество из переменной Position.positions. Судя по коду, это глобальное хранилище всех созданных позиций.
Метод __hash__ класса Position. Вычисляет хэш-код на основе значения поля code.