循环遍历python中选定对象属性的列表以创建树视图

时间:2014-06-29 20:20:14

标签: python oop dictionary pyqt

我有一个对象Restaurant

class Restaurant:
    def __init__(self, name, location, phone, parent = None):
        self.staff = []
        self.tables = []
        self.menu = []
        self.name = name
        self.location = location
        self.phone = phone

        self.dict = {"Staff": self.staff, "Tables": self.tables, "Menu": self.menu}

    def addStaff(self, staff_object):
        self.staff.append(staff_object)

然后我使用类方法self.staff将新的staff对象(带有一些属性)添加到列表addStaff

添加对象后,我打印self.dict,它仍然是空的。什么是更新"的正确方法。 self.dict中的值以获取正确的值,并最终在树视图中显示它们,如:

宝仕达
--- staff_1
--- staff_2
--...
-tables
--- TABLE_1
--- TABLE_2
--...
-menus
--- menu_1
--- menu_2
--- menu_3

3 个答案:

答案 0 :(得分:2)

这是一个如何添加实例化类并添加项目的示例。

class Restaurant:
    def __init__(self, name, location, phone, parent = None):
        self.staff = []
        self.tables = []
        self.menu = []
        self.name = name
        self.location = location
        self.phone = phone

        self.rest_dict = {"Staff": self.staff, "Tables": self.tables, "Menu": self.menu}

    def addStaff(self, staff_object):
        self.staff.append(staff_object)

    def addTables(self, table_object):
        self.tables.append(table_object)

    def addMenu(self, menu_object):
        self.menu.append(menu_object)
r = Restaurant("foo","bar",911) # instantiate 
r.addStaff("Foo")
r.addStaff("Bar") # append using method
r.staff.append("Foo1") # you can also  access attributes directly
r.addMenu("Lunch")
r.addMenu("Dinner")
r.menu.append("Lunch")
r.addTables(1)
r.addTables(2)
r.tables.append(3)
print r.rest_dict

{'Menu': ['Lunch', 'Dinner', 'Lunch'], 'Tables': [1, 2, 3], 'Staff': ['Foo', 'Bar', 'Foo1']}

答案 1 :(得分:2)

您的真实代码包含

等行
self.joints = ...

而不是像您发布的代码一样附加到列表中。这不会修改现有列表;将self.joints属性指向新列表,而对旧列表具有引用的所有内容均不受影响。从那时起,访问self.joints的任何内容都会使用新列表,而使用self.model_view[2]的任何内容都会使用旧列表。

不要那样做。如果要设置现有列表的内容,请在以下位置切片分配内容:

self.joints[:] = ...

通常,如果您真正想要修改的是对象,则永远不要直接分配给变量。

答案 2 :(得分:0)

我已经解决了第84行的问题。我改变了它:

if not self.MBD_system_constructed

为:

if self.MBD_system_constructed