如何在类中迭代`dict`就好像只是提到`dict`一样?

Equ*_*Dev 2 python dictionary iterator python-3.x

在一个定义的对象中,一些值保存在a中dict,我希望迭代内容,dict就像在引用plain时一样dict,因此直接访问使用[],并使用例如循环.items().代码结构是:

class Klass:

    def __init__(self, values):
        self.values = values
        self.more = None

    def __getitem__(self, name):
        return self.values[name]

    def __iter__(self):
        pass  # TBD[How to make this ?]

d = {'alfa': 1, 'bravo': 2, 'charlie': 3}

k = Klass(d)

for key in k:
    print(key)  # Expected to print keys from self.values 

for (key, value) in k.items():
    print(key, value)  # Expected to print key and value from self.values 

for key in k.keys():
    print(key)  # Expected to print key from self.values 

for value in k.values():
    print(value)  # Expected to print value from self.values 
Run Code Online (Sandbox Code Playgroud)

如何编写__iter__和其他必需的方法,以便通过Klass的实例进行这种访问?

Mar*_*ers 10

你必须执行.keys(),.values().items()自己的方法; 与__iter__他们一起可以将实际工作委托给self.values()字典:

class Klass:
    def __init__(self, values):
        self._values = values
        self.more = None

    def __getitem__(self, name):
        return self._values[name]

    def __iter__(self):
        return iter(self._values)

    def keys(self):
        return self._values.keys()

    def items(self):
        return self._values.items()

    def values(self):
        return self._values.values()
Run Code Online (Sandbox Code Playgroud)

我重命名了该属性以避免屏蔽该.values()方法.

委托__iter__迭代字典(通过键)的最简单方法是使用该iter()函数获取字典对象的迭代器.

要明确:__iter__起着怎样的作用没有.keys(),.values().items()进行处理; 后者只是更多的方法.