跳转至

魔法方法 -- 字典


代码

class Demo(object):
    def __init__(self, start = 0, step = 1):
        self.start = start
        self.step = step
        self.changed = {}

    def __getitem__(self, key):
        try:
            return self.changed[key]
        except KeyError:
            return self.start + key * self.step

    def __setitem__(self, key , value):
        self.changed[key] = value
        print('长度1: ', len(self.changed))

    def __delitem__(self, key):
        self.changed.pop(key)
        print('长度2: ', len(self.changed))


def main():
    demo = Demo(1,2)

    # 自动触发执行 __getitem__
    print(demo[4])
    print(demo.changed)

    # 自动触发执行 __setitem__
    demo[4] = 2
    print(demo[4])
    print(demo.changed)

    # 自动触发执行 __delitem__
    del demo[4]
    print(demo.changed)


if __name__ == '__main__':
    main()

输出:

9
{}
长度1:  1
2
{4: 2}
长度2:  0
{}

PS: 前后双下划线的方法, 以前叫魔法(magic)变量或魔法方法, 现在叫dunders