100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 将Python对象转换成字典

将Python对象转换成字典

时间:2023-08-19 12:36:21

相关推荐

将Python对象转换成字典

看到了一个将Python中的对象转换成字典的方法.

class TestClass:def __init__(self):self.a = 1self.b = 2

这里我们定义一个类TestClass, 它有两个属性ab.

tc = TestClass()print(tc.a) # 1print(tc.b) # 2

tc是类TestClass的一个实现, 也是一个对象. 我们调用它的属性时, 需要这样写:tc.a,tc.b.

而使用Python的内置函数vars就可以将一个对象映射成字典类型:

tc_dict = vars(tc)print(tc_dict) # {'a': 1, 'b': 2}print(tc_dict['a'], tc_dict['b']) # 1 2

这样做的用处之一, 是可以将对象的属性打印成json格式的字符串, 方便存储成日志文件.

import jsonjson.dumps(tc_dict) # '{"a": 1, "b": 2}'

注意,vars函数在映射类的实例时, 只能映射其实例变量(instance variable), 即在__init__方法中初始化的变量. 与之对应的类变量(class variable), 即在类下直接设置的变量则不会被映射到. 这里给出一个例子:

class TestClass:c = 3 # class variabledef __init__(self):self.a = 1 # instance variableself.b = 2 # instance variabletc = TestClass()print(vars(tc)) # 映射到的字典中没有关键字 'c' # {'a': 1, 'b': 2}# 映射类的'type'对象print(vars(TestClass)) # 映射到的字典中没有实例变量的关键字 'a', 'b', 但是有类变量 'c'# {'__module__': '__main__', 'c': 3, '__init__': <function TestClass.__init__ at 0x7f3a476f4b70>, '__dict__': <attribute '__dict__' of 'TestClass' objects>, '__weakref__': <attribute '__weakref__' of 'TestClass' objects>, '__doc__': None}

这里插一句题外话, 也可以通过修改类的__repr__或者__str__属性, 来获得更加灵活的输出格式.

class TestClass:def __init__(self):self.a = 1self.b = 2def __repr__(self):return f"{{'a' : {self.a}, 'b' : {self.b}}}"tc = TestClass()print(tc) # {'a' : 1, 'b' : 2}

一点想法: 通过重写类中的__dict__方法可以拓展字典的转换方法.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。