Тема: Знатоки Питона, помогите пожалуйста

Не поможет ли кто?
Нужно разобраться с программой на Python (основные функции и что делает каждая строчка). Этот язык для меня новый, разбираться по книжкам пытаюсь, но понятть программу пока не получается (а очень хочется и нужно). Поэтому прошу оказать помощь всех кому не сложно!
Содержание классов (синтаксис) вроде повторяется, поэтому, если не затруднит разъясните, хотябы первый и последний класс "Должность" и "Занятие". Заранее огромное спасибо!!
"""
Университет
"""
class Position:
"""
Должность
"""
counter = 0
positions = set()
def __init__(self, name):
Position.counter += 1
self.code = Position.counter
self.name = name
Position.positions.add(self)
def __hash__(self):
return hash(self.code)
class Teacher:
"""
Преподаватель
"""
counter = 0
teachers = set()
def __init__(self, name, adress, position):
assert position in Position.positions
Teacher.counter += 1
self.number = Teacher.counter
self.name = name
self.adress = adress
self.position = position
Teacher.teachers.add(self)
def __hash__(self):
return hash(self.number)
class Chair:
"""
Кафедра
"""
counter = 0
chairs = set()
def __init__(self, name, (chairName, adress, position)):
Chair.counter += 1
self.code = Chair.counter
self.name = name
headChair = Teacher(chairName, adress, position)
self.headChair = headChair
self.teachers = [headChair]
Chair.chairs.add(self)
def addTeacher(self, name, adress, position):
teacher = Teacher(name, adress, position)
self.teachers.append(teacher)
return teacher
def __hash__(self):
return hash(self.code)
class Auditorium:
"""
Аудитория
"""
counter = 0
auditoriums = set()
def __init__(self, name):
Auditorium.counter += 1
self.number = Auditorium.counter
self.name = name
Auditorium.auditoriums.add(self)
def __hash__(self):
return hash(self.number)
class Examination:
"""
Экзамен
"""
counter = 0
examinations = set()
def __init__(self, name):
Examination.counter += 1
self.code = Examination.counter
self.name = name
Examination.examinations.add(self)
def __hash__(self):
return hash(self.code)
class Subject:
"""
Предмет
"""
counter = 0
subjects = set()
def __init__(self, name, hours, examination):
assert examination in Examination.examinations
Subject.counter += 1
self.code = Subject.counter
self.name = name
self.hours = hours
self.examination = examination
Subject.subjects.add(self)
def __hash__(self):
return hash(self.code)
class Lesson:
"""
Занятие
"""
lessons = []
def __init__(self, teacher, subject, auditorium):
assert teacher in Teacher.teachers
assert subject in Subject.subjects
assert auditorium in Auditorium.auditoriums
self.teacher = teacher
self.subject = subject
self.auditorium = auditorium
Lesson.lessons.append(self)
if __name__ == "__main__":
assistant = Position('ассистент')
lecturer = Position('доцент')
professor = Position('профессор')
chair = Chair('КА&ТЧ', ('Кузнецов В.Н.', 'Саратов', professor))
teach1 = chair.addTeacher('Блинков Ю.А.', 'Саратов', lecturer)
teach2 = chair.addTeacher('Ромакина О.М.', 'Саратов', assistant)
aud1 = Auditorium('им.Вавилова')
aud2 = Auditorium('111')
exam1 = Examination('зачет')
exam2 = Examination('экзамен')
sub1 = Subject('Проектирование ИС(лек)', 2, exam1)
sub2 = Subject('Проектирование ИС(прак)', 2, exam2)
sub3 = Subject('Алгебра', 2, exam1)
Lesson(chair.headChair, sub3, aud1)
Lesson(teach1, sub1, aud1)
Lesson(teach2, sub2, aud2)
Lesson(teach2, sub2, aud2)
for lesson in Lesson.lessons:
print "%13s" % lesson.teacher.name,
print "%13s" % lesson.teacher.position.name,
print "%23s" % lesson.subject.name,
print "%2d" % lesson.subject.hours,
print "%6s" % lesson.subject.examination.name,
print "%15s" % lesson.auditorium.name

Re: Знатоки Питона, помогите пожалуйста

По ходу разбираюсь. Застряла на классах "Кафедра" и "Предмет" и уж совсем непонятен последняя часть, начиная с
if __name__ == "__main__":
Помогите, пожалуйста. Нормальный код:

#! /usr/bin/env python
# -*- coding: cp1251 -*-
"""
Университет
"""
class Position:
  """
  Должность
  """
  counter = 0
  positions = set()
  def __init__(self, name):
    Position.counter += 1
    self.code = Position.counter
    self.name = name
    Position.positions.add(self)
  def __hash__(self):
    return hash(self.code)
class Teacher:
  """
  Преподаватель
  """
  counter = 0
  teachers = set()
  def __init__(self, name, adress, position):
    assert position in Position.positions
    Teacher.counter += 1
    self.number = Teacher.counter
    self.name = name
    self.adress = adress
    self.position = position
    Teacher.teachers.add(self)
  def __hash__(self):
    return hash(self.number)
class Chair:
  """
  Кафедра
  """
  counter = 0
  chairs = set()
  def __init__(self, name, (chairName, adress, position)):
    Chair.counter += 1
    self.code = Chair.counter
    self.name = name
    headChair = Teacher(chairName, adress, position)
    self.headChair = headChair
    self.teachers = [headChair]
    Chair.chairs.add(self)
  def addTeacher(self, name, adress, position):
    teacher = Teacher(name, adress, position)
    self.teachers.append(teacher)
    return teacher
  def __hash__(self):
    return hash(self.code)
class Auditorium:
  """
  Аудитория
  """
  counter = 0
  auditoriums = set()
  def __init__(self, name):
    Auditorium.counter += 1
    self.number = Auditorium.counter
    self.name = name
    Auditorium.auditoriums.add(self)
  def __hash__(self):
    return hash(self.number)
class Examination:
  """
  Экзамен
  """
  counter = 0
  examinations = set()
  def __init__(self, name):
    Examination.counter += 1
    self.code = Examination.counter
    self.name = name
    Examination.examinations.add(self)
  def __hash__(self):
    return hash(self.code)
class Subject:
  """
  Предмет
  """
  counter = 0
  subjects = set()
  def __init__(self, name, hours, examination):
    assert examination in Examination.examinations
    Subject.counter += 1
    self.code = Subject.counter
    self.name = name
    self.hours = hours
    self.examination = examination
    Subject.subjects.add(self)
  def __hash__(self):
    return hash(self.code)
class Lesson:
  """
  Занятие
  """
  lessons = []
  def __init__(self, teacher, subject, auditorium):
    assert teacher in Teacher.teachers
    assert subject in Subject.subjects
    assert auditorium in Auditorium.auditoriums
    self.teacher = teacher
    self.subject = subject
    self.auditorium = auditorium
    Lesson.lessons.append(self)
if __name__ == "__main__":
  assistant = Position('ассистент')
  lecturer = Position('доцент')
  professor = Position('профессор')
  chair = Chair('КА&ТЧ', ('Кузнецов В.Н.', 'Саратов', professor))
  teach1 = chair.addTeacher('Блинков Ю.А.', 'Саратов', lecturer)
  teach2 = chair.addTeacher('Ромакина О.М.', 'Саратов', assistant)
  aud1 = Auditorium('им.Вавилова')
  aud2 = Auditorium('111')
  exam1 = Examination('зачет')
  exam2 = Examination('экзамен')
  sub1 = Subject('Проектирование ИС(лек)', 2, exam1)
  sub2 = Subject('Проектирование ИС(прак)', 2, exam2)
  sub3 = Subject('Алгебра', 2, exam1)
  Lesson(chair.headChair, sub3, aud1)
  Lesson(teach1, sub1, aud1)
  Lesson(teach2, sub2, aud2)
  Lesson(teach2, sub2, aud2)
  for lesson in Lesson.lessons:
    print "%13s" % lesson.teacher.name,
    print "%13s" % lesson.teacher.position.name,
    print "%23s" % lesson.subject.name,
    print "%2d"  % lesson.subject.hours,
    print "%6s"  %lesson.subject.examination.name,
    print "%15s" % lesson.auditorium.name

Re: Знатоки Питона, помогите пожалуйста

ЭЭЭ.
Боюсь спрашивать про питон не на этом форуме надо.
Подойдет "программисткий" сайт с форумом, возможно на Unix-форумах могут помочь.