Форум сайта python.su
0
Доброго времени!
Не так давно начал разбираться в ООП (как собственно и в Питоне). Сейчас требуется написать класс для работы со списками.
Список формируется из файла, данные в котором хранятся в таком виде:
0,Иванов А. И.,Ген. директор
1,Петров С. Р.,Бухгалтер
2,Сидоров Г. Н.,Менеджер
Получаем “двумерный массив”. Интересует, как лучше организовать систему классов для добавления новых сотрудников, вывода всех сотрудников на экран и т.п.
Сделать 2 класса Сотрудник и Сотрудники или же обойтись одним. Делать формирование списка как метод класса или же отдельно.
Короче говоря, требуется небольшое пояснение по данному вопросу. Спасибо!
Офлайн
20
А чем родные списки не устраивают (или даже словарь с кортежами)?
people = {0: ('Иванов А. И.', 'Ген. директор')}
people[1] = 'Петров С. Р.', 'Бухгалтер' # скобки не обязательны
people.update({
2: ('Сидоров Г. Н.', 'Менеджер'),
3: ('FooBar', 'Baz')
})Отредактировано (Ноя. 4, 2010 00:22:09)
Офлайн
0
Родные списки используются. Формируем списки из файла стандартными методами.
Но далее, например, нужно добавить ещё 1 сотрудника и записать обратно в файл.
Для этого необходимо организовать метод Add в классе Staff. И вообще, не понимаю, как связать классы Employee (Сотрудник) и Staff (Сотрудники)… Может быть нужно использовать только Staff ?
Офлайн
0
Надо именно самому сделать это все, или сойдет модуль csv?
Офлайн
0
Вот смотрите, с помощью модуля CSV формирую список:
staff = []
data = csv.reader(open(os.path.join(os.curdir, 'staff.csv'), 'rb'), delimiter=';')
for row in data :
staff.append(row)
Офлайн
18
может быть прочитаете литературу, тема не такая маленькая что бы описать в одном посте
Офлайн
0
Да мне бы примерчик с использованием класса Employee (т.е. 1 работник), наследующим его классом Staff(т.е. все сотрудники) и методами AddRow(добавить нового сотрудника), GetTable(вывести всех сотрудников), конечно если такая структура правильная (мб нужно использовать 1 класс). Думаю после этого я уже разберусь в теме и сделаю всё, что мне нужно.
Также приму советы хорошей литературы по ООП или простые примеры отличия процедурного и объекто-ориентированного подходов.
Отредактировано (Ноя. 4, 2010 18:46:03)
Офлайн
20
Staff не может наследоваться от Employee, это же очевидно.
Вот набросок:
class Employes(object):
def __init__(self, filename = 'emplyes.csv'):
self.filename = filename
self.items = {}
self.reset()
def reset(self):
self.clear()
if os.path.exists(self.filename):
data = csv.reader(open(self.filename), delimiter=';')
# TODO
# перегоняем данные в словарь self.item,
# словарь того вида, что я показывал выше
raise NotImplementedError('TODO csv reader')
def clear(self):
self.items.clear()
def save(self):
"""TODO
Используя csv записать содержимое словаря self.items в self.filename.
"""
raise NotImplementedError('TODO csv writer')
def add(self, name, appointment):
new_id = max(self.items.keys() or [0]) + 1
self.items[new_id] = name, appointment
def remove(self, emp_id):
self.items.pop(emp_id)
def filter(self, name_mask = '', app_mask = ''):
"""Новый словарь сотрудников, в имени которых содержится `name_mask`,
а в должности `app_mask`."""
filtered_employes = {}
for id, (name, app) in self.items.iteritems():
if name_mask in name and app_mask in app:
filtered_employes[id] = name, app
return filtered_employes
Отредактировано (Ноя. 4, 2010 20:40:52)
Офлайн
0
bwТам имеется в виду - Staff наследует Employee, такое ведь возможно?
Staff не может наследоваться от Employee, это же очевидно.
Офлайн