Member Avatar for Wraithan
class Item: def __init__(self, id, content, userid, duedate, collapsed, inhistory, priority, itemorder, faded, projectid, checked, datestring): self.id = id self.content = content self.userid = userid self.duedate = duedate self.collapsed = collapsed self.inhistory = inhistory self.priority = priority self.itemorder = itemorder self.faded = faded self.projectid = projectid self.checked = checked self.datestring = datestring def __str__(self): return self.content class Project: def __init__(self, id, name, userid, color, collapsed, itemorder, indent, order): self.id = id self.name = name self.userid = userid self.color = color self.collapsed = collapsed self.itemorder = itemorder self.indent = indent self.order = order self.items = {} def __str__(self): return self.name def __name__(self): return 'Project' def addItem(self,item): self.items.update({item.id:item}) def delItem(self,item): del self.items[item.id] class TodoList: def __init__(self): self.projects = {} def addProject(self,project): self.projects.update({project.id:project}) def delProject(self,project): del self.projects[project.id] def addItem(self,item): self.projects[item.projectid].addItem(item) def delItem(self,item): self.projects[item.projectid].delItem(item)

Some of the above code is changing as we speak but I am curious if I should make the projects dict and items dicts private and use accessor functions to move items between projects or change the attributes of a project or item.

Another thought is to have items and projects both be members of TodoList as I am provided with the Item's project ID when I get the Item, so I could just have a method that returned all the items with a given project ID and not bother with separating them into the individual projects.

I am just trying to design the best I can as I plan on using this app as an example of my Python coding ability, though I just started with python about 3 days ago.

Member Avatar for slate

We do not make private attributes in python, except in very rare cases. You can shadow the attribute access with "property" decorator later.

The Item and the Project class is trying to reimplement the named tuple, which is present in python 2.6 or later.

From a design point of view I find it unfortunate, that you provide interface in the TodoList to add an item to a project.

Another problem is that you do not have any Item without Project. So Items aggregate (in uml sense) to a Project.

It is unforunate too, that your TodoList.addItem calls the items project to add the item to its own project:)

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.