Буквально вчера завалил зачет по питону. Преподавателю нужно было написать два класса для учета ЖД рейсов. запись в файл, чтение, поиск. Второй класс должен был наследоваться от словаря. Прогу то я написал, но просто со списками. Для форумчан эта прога наверное очень простая. Я уж не буду позориться приводить ее здесь. А вот наследование от словаря я понятия не имею как и главное что это дает. Литературы мало. Ухх предстоит же мне еще почитать всего. В общем я и еще двое завалились, а один человек сдал. Вот по его программе я сегодня и пытался понять как это наследование от словаря работает. Ничего не понял. Может прога является подставой. Я не понимаю ее сути. Она состоит из двух классов. Класс Товары - что то типа контейнера. Описывает единицу “Товар”. А класс конт должен организовать хранение объектов класса Товар с их чтением/записью в файл, поиск по ним. Видимо в виде словаря. Вот эта программа, вуаля:
# -*- coding: cp1251 -*- import os class Tovari: def __init__ (self, Name="", Cena=""): self.Name=Name self.Cena=Cena def SetAttributes (self, string): self.Name, self.Cena = string.split(';') return True def Print(self): print "Название:", self.Name print "Цена:", self.Cena print "-----------" class Cont(dict): def __init__(self, default=None): dict.__init__(self) #__init__ для словаря self.default = default return self.default def __getitem__(self, key): #Непонятный метод try: return dict.__getitem__(self, key) except KeyError: return self.default def Append(self, a, b=''): self[b]=a def WriteToFile(self): #Значения из словаря пишем в файл f=open('1.txt', "w") #_откуда в словаре объекты класса Товары? for l in dict.values(self): f.write(l.Name+';'+l.Cena+';'+'\n') #Откуда??? f.close() def Find (self, name, FullMatch=True): if FullMatch: for k in dict.values(self): if k.name==name: return k else: for k in dict.values(self): if k.name.find(name)!=-1: return k d=Cont() d.WriteToFile()
1. В __init__(self, default=None)передается атрибут default и он же возвращается, что это и зачем его возвращать?
2. Непонимаю что за метод __getitem__(self, key), аналогично зачем он принимает key и возвращает его либо default.
3. Метод WriteToFile(self) вообще поражает, он записывает элементы словаря в файл. Но! Откуда в словаре оказались элементы объекта класса Товары? Ведь нигде не создавался объект этого класса.
4. Насчет поиска никаких вопросов.. только смущают точки. Ну поиск по словарю.. в принципе понятно как сделать.
Вот.. прошу помочь разобраться в программе.