Форум сайта python.su
Здравствуйте!
Пишу что-то вроде бд которая крутиться в оперативной памяти
(just for fun)
#!/usr/bin/python # -*- coding: utf-8 -*- class File: def __init__(self, **kwargs): for k, v in kwargs.items(): setattr(self, k, v) def getHost(self): return FileDb.hosts[self.host_id] class Host: __slots__ = ('id', 'name', 'enc', 'paths', 'files', ) files = [] def __init__(self, **kwargs): for k, v in kwargs.items(): setattr(self, k, v) def addFile(self, fullname, size): # parsing fullname path, name = fullname.rsplit('/', 1) if '.' in name: name, ext = name.rsplit('.', 1) else: ext = None file_inst = File( name = name, ext = ext, size = size ) self.files.append(file_inst) return file_inst def countFiles(self): return len(self.files) class FileDb: hosts = {} def __init__(self): for x in range(5): self.hosts[x] = Host( id=x, name='name_%s.ru' % x ) def getHost(self, id): try: return self.hosts[id] except KeyError: pass def countFiles(self): res = 0 for id in self.hosts: res += self.hosts[id].countFiles() return res db = FileDb() db.getHost(1).addFile('/fdg/dgfdf/dfg.txt',565) print db.countFiles()# выводит 5, т.е к каждому хосту был добавлен файл
Отредактировано andreiru (Июль 18, 2012 15:05:17)
Прикреплённый файлы:
test.py (1,1 KБ)
Офлайн
Потому что files у вас объявлен на уровне класса. Таким образом все объекты используют один список.
Исправить можно так:
class Host: __slots__ = ('id', 'name', 'enc', 'paths', 'files', ) def __init__(self, **kwargs): self.files = [] for k, v in kwargs.items(): setattr(self, k, v)
Офлайн
GaiveR, спасибо, понял ошибку!
Офлайн