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

一、

最近公司要求使用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))

六、

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,183评论 19 139
  • 用到的组件 1、通过CocoaPods安装 2、第三方类库安装 3、第三方服务 友盟社会化分享组件 友盟用户反馈 ...
    SunnyLeong阅读 14,980评论 1 180
  • 前言 ||| 第二章 使用ArcPy编写脚本 Python支持大部分在其他语言中出现的编程结构。在本章内容中,我们...
    muyan阅读 90,671评论 10 55
  • 最全的iOS面试题及答案 iOS面试小贴士 ———————————————回答好下面的足够了-----------...
    zweic阅读 7,639评论 0 73
  • 日光泼洒大地, 耀眼。 晨的露珠, 如点点繁星。 那忙碌的人, 脚步追逐着 梦想。
    赵着急_阅读 1,517评论 0 1

友情链接更多精彩内容