带有模拟项的python类()

时间:2017-12-11 19:14:13

标签: python class items

这是我的简单课程:

 class row(object):
        __slots__ = ("tan_id", "proc_name")
        def __init__(
            self, 
            tan_id = "INDETERMINATE", 
            proc_name = "INDETERMINATE"
        ):
            self.tan_id = tan_id
            self.proc_name = proc_name

这个类曾经是一个字典,但我遇到了严重的内存问题。稍后在我的代码中,我使用一个通用函数来循环:

 for key, val in row.items()

我不想改变它...所以我的问题是,如何在类中模拟item()函数,以便它在现有的for循环中无缝地工作。

1 个答案:

答案 0 :(得分:3)

您可以通过生成相同的键值对来简单地实现模仿先前items行为的dict.items()方法:

class row(object):
    # ...
    def items(self):
        # this is the iterator behaviour of 'items' (Py3) or 'iteritems' (Py2)
        yield 'tan_id', self.tan_id
        yield 'proc_name', self.proc_name
        # for the Py2 items behaviour, put these pairs into a list 
        # and return the list

    # Or, more generally:
    def items(self):
        for slot in self.__slots__:
            yield slot, getattr(self, slot)