代码之家  ›  专栏  ›  技术社区  ›  jlv

如何在python中通过属性访问特定的类实例?

  •  0
  • jlv  · 技术社区  · 14 年前

    假设我有一个带有self.contents和self.number两个属性的类框。我在一个名为box的列表中有box的实例。是否仍然可以通过特定实例的属性来访问/修改该实例,而不是遍历框?例如,如果我想要一个box.number=40的框(列表没有排序),那么修改其内容的最佳方法是什么。

    4 回复  |  直到 14 年前
        1
  •  2
  •   eumiro    14 年前

    如果你需要更频繁地做并且你有独特的 number s、 然后创建字典:

    numberedBox = dict((b.number, b) for b in Boxes)
    

    然后,您可以直接使用数字访问您的框:

    numberedBox[40]
    

    但是如果你想改变他们的号码,你必须修改 numberedBox 字典也是。。。

    否则,必须遍历列表。

        2
  •  1
  •   MAK    14 年前

    最直接的方法是使用列表理解:

    answer=[box for box in boxes if box.number==40]
    

    不过还是要小心。这实际上是在整个 list 列表 没有排序,没有比遍历它更快的方法(从而执行线性搜索),除非您希望将所有数据复制到其他数据结构中(例如。 dict , set 或排序 ).

        3
  •  0
  •   user470379    14 年前

    使用内置过滤器:

    wanted_boxes = filter(lambda box: box.number == 40, boxes)
    
        4
  •  0
  •   martineau    14 年前

    boxes 0...MAX_BOX_NUMBER ,那么接下来的动作会非常快。它只需要对 Boxes 列表以设置表。

    MAX_BOX_NUMBER = ...
    
    # setup lookup table   
    box_number = [None for i in xrange(MAX_BOX_NUMBER+1)]
    for i in xrange(len(Boxes)):
        box_number[Boxes[i].number] = Boxes[i]
    
    box_number[42] # box in Boxes with given number (or None)