美文网首页Python
Python用属性的方式访问字典(dict)

Python用属性的方式访问字典(dict)

作者: 冰麟轻武 | 来源:发表于2018-04-12 23:40 被阅读0次

一、

最近公司要求使用Python开发一个跨平台客户端,就学习了一下
总的来说Python真的是非常的简单

二、

从C#转任何语言都会给人一种“这个语法真烂啊!”这样的感觉
比如在C#中我曾经实现了一个dynamic类型
既可以使用索引器访问,也可以使用属性的方式访问,而且属性名不区分大小写

var obj = new { id:1 }.ToDynamic();
Console.WriteLine(obj.id);
Console.WriteLine(obj.ID);
Console.WriteLine(obj["Id"]);

三、

所以我想用Python也实现一个,研究了一下发现,嘿还真简单!
继承dict,重写索引器__getitem____setitem__
实现属性读写方法__getattr____setattr__
最后再重新实现toString方法__str__

四、

class dynamic(dict):
    def __init__(self, d=None):
        if d is not None:
            for k,v in d.items():
                self[k] = v
        return super().__init__()

    def __key(self, key):
        return "" if key is None else key.lower()

    def __str__(self):
        import json
        return json.dumps(self)

    def __setattr__(self, key, value):
        self[self.__key(key)] = value

    def __getattr__(self, key):
        return self.get(self.__key(key))

    def __getitem__(self, key):
        return super().get(self.__key(key))

    def __setitem__(self, key, value):
        return super().__setitem__(self.__key(key), value)

五、

测试一下

obj = dynamic({"id":1});
print(obj.id)
print(obj.ID)
print(obj["Id"])
print(str(obj))

六、

相关文章

网友评论

    本文标题:Python用属性的方式访问字典(dict)

    本文链接:https://www.haomeiwen.com/subject/pnhqkftx.html