当前位置 > Chrome插件首页 > Chrome插件问答 > Python开发详解实战,独特见解 使用 attrs 和 cattrs 实现面向对象编程

Python开发详解实战,独特见解 使用 attrs 和 cattrs 实现面向对象编程

【Chrome插件百科】 2019-07-11 09:25:06 4143人已围观

简介attrs 和 cattrs 实现面向对象编程基本用法,属性处理,数据对象转换,两个库实现 Python 面向对象编程的实践,有了它们两个的加持,面向对象编程会使得代码更加容易扩展。

 
基本用法
首先明确一点,我们现在是装了 attrs 和 cattrs 这两个库,但是实际导入的时候是使用 attr 和 cattr 这两个包,是不带 s 的。
在 attr 这个库里面有两个比较常用的组件叫做 attrs 和 attr,前者是主要用来修饰一个自定义类的,后者是定义类里面的一个字段的。有了它们,我们就可以将上文中的定义改写成下面的样子:

主要是 attrs 这个修饰符起了作用,然后根据定义的 attrib 属性自动帮我们实现了 init 、 repr 、 eq 、 ne 、 lt 、 le 、 gt 、 ge 、 hash 这几个方法。

属性处理
上面的例子都是理想情况下使用的,但在实际情况下,很容易遇到 JSON 和对象不对应的情况,比如 JSON 多个字段,或者对象多个字段。

另外还有一个常见的问题,那就是数据对象转换,比如对于时间来说,在对象里面声明我们一般会声明为 datetime 类型,但在序列化的时候却需要序列化为字符串。
所以,对于一些特殊类型的属性,我们往往需要进行特殊处理,这时候就需要我们针对某种特定的类型定义特定的 hook 处理方法,这里就需要用到 register_unstructure_hook 和 register_structure_hook 方法了。

Python 是支持面向对象的,很多情况下使用面向对象编程会使得代码更加容易扩展,并且可维护性更高,但是如果你写的多了或者某一对象非常复杂了,其中的一些写法会相当相当繁琐,而且我们会经常碰到对象和 JSON 序列化及反序列化的问题,原生的 Python 转起来还是很费劲的。

想定义一个颜色对象,那么正常的写法就是这样了,创建这个对象的时候需要三个参数,就是 R、G、B 三个数值,定义如下:

对象一般就是这么定义的,初始化方法里面传入各个参数,然后定义全局变量并赋值这些值。其实挺多常用语言比如 Java、PHP 里面都是这么定义的。但其实这种写法是比较冗余的,比如 r、g、b 这三个变量一写就写了三遍。

在 Python 里面想要定义某个对象本身的打印输出结果的时候,需要实现它的 __repr__ 方法,所以我们比如我们添加这么一个方法:
这样我们就成功实现了嵌套对象的序列化和反序列化,所有问题成功解决!

结语
本节介绍了利用 attrs 和 cattrs 两个库实现 Python 面向对象编程的实践,有了它们两个的加持,Python 面向对象编程不再是难事。

Python开发详解实战,独特见解 使用 attrs 和 cattrs 实现面向对象编程 相关插件

FromDocToPDF

生产工具插件 2019-06-22 21:28:50

Now enjoy immediate access to a FREE PDF converter, a MS Word® converter, translations, Wikipedia®, dictionary look-up and more!

热门Chrome插件