一、
最近公司要求使用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))
网友评论