Python从列表中返回类的实例

时间:2016-11-20 12:06:10

标签: python

我尝试在列表中获取对象实例的索引。而且我不知道如何在没有for循环的情况下做到这一点。

如果有人可以向我展示正确的方向,而不是让它循环。

我发现该列表的实例与any() - 函数有关,但无法从中获取索引。

我试着澄清我的问题。如果any() - fucntion可以找到该列表(self.data)具有对象的实例。 any() - 函数只返回true / false。是否有函数或方法来获取该实例的索引,以便我可以调用它。

代码:

class MyClass: 

    def __init__(self, f):
        self.data = []
        self.f = open(f, "rb")
        self.mod = sys.modules[__name__]

    def readFile(self):
        f = self.f
        try:
            self.head = f.read(8)
            while True:
                length = f.read(4)
                if length == b'':
                    break
                c = getattr(self.mod, f.read(4).decode())
                if any(isinstance(x, c) for x in self.data):
                    index = self.data.index(c) #Problem is here
                    self.data[index].append(f.read(int(length.hex(), 16)))
                else:
                    obj = c(data=f.read(int(length.hex(), 16)))
                    self.data.append(obj)
                f.read(4) #TODO check CRC
        finally:
            f.close()

2 个答案:

答案 0 :(得分:2)

enumerate是前往这里的方式。

...
c = getattr(self.mod, f.read(4).decode())
found = [ (i, x) for (i,x) in enumerate(self.data) if isinstance(x, c) ]
if len(found) > 0:
    index, val = found[0]
    ...

答案 1 :(得分:1)

专注于在self.data列表中获取对象及其索引的实例:

# ...

# This gives you back a class name I assume?
c = getattr(self.mod, f.read(4).decode())

# The following would give you True/False ... which we don't need
# any(isinstance(x, c) for x in self.data)

# Now, this will return _all_ the instances of `c` in data
instances = [x for x in self.data if isinstance(x, c)]


if len(instances):
    # Assuming that only 1 instance is there
    index = self.data.index(instances[0])
    # ??? What do you append here?
    self.data[index].append()
else:
    obj = c(data=f.read(int(length.hex(), 16)))
    self.data.append(obj)

f.read(4) #TODO check CRC