简介:ARTS,即Algorithms Review Tip Share 的首字母缩写。这项挑战由知名博主、技术大牛 「左耳朵耗子」发起,挑战内容为每周至少:
- 在LeetCode上完成一道算法题
- 阅读并点评一篇英文技术文章(推荐 techcrunch、readwrite、dzone(无需梯子))
- 总结发现一个技术技巧
- 分享一篇有思想和见解的技术文章
Algorithms
Review
原文:3 Surprising Benefits of the Cloud in IoT
点评:
文章主要介绍了使用云的三种好处,分别是:有利于数据集成、增加安全性和可靠性、云配合边缘计算带来的商业利益。
Tip
分享一个总结的通用方法,收集错误类型和详细信息:
import sys
def common_error(data: str):
"""
捕获异常时打印详细错误信息,用于 except 后
:param data:
:return:
"""
info = sys.exc_info()
print("{}:".format(data), str(info[0]), ",", str(info[1]))
Share
接口、动态绑定和抽象类
这周开始准备啃一啃之前落下的《Java编程思想》,之前因为工作原因,丢下了 Java 很久,以为转 Python 之后,也就没必要两种语言齐头并进了。随着对 Python 的逐渐深入,慢慢了解到,Python 语言系统的很多设计思路与 Java 很类似,甚至很多知识点,在 Python 类技术书籍中很少有讲清楚的,市面上很多教程和书籍讲的都很「浅」,仅仅「辄止于」如何使用一些模块和高级语法、函数等。
都说 Python 「简单」,但是就我近一两年所见,无论是博客还是专业书籍,还是论坛上的讨论深度,都很少提到其深层次的设计原理和实现,更无所谓一些优化方案了。类似的知识,还是经过长时间市场检验的 Java 的生态更丰富。
正好两种语言也有相似之处,准备通过研究 Java 的相关知识,来反馈 Python 的学习。正所谓「他山之石可以攻玉」,当然了,Java 未必只是「石」。
就比如书中提到的关于接口、动态绑定和抽象类之间的关系,之前如果只是「会用」,那么看过之后可以说清楚很多了。
基础类和衍生类的概念来自重要的oop特性「继承」,主要是为了增加程序的扩展性,而编译器和运行时系统会通过动态绑定,来帮助我们实现,所以我们就可以在编程时忽略掉相关的类型细节。有时候,我们仅仅想让基础类提供某些接口,通过衍生类来具体实现,那么加上 abstract 关键字使其变成抽象类,编译器就会进行有效的限制。甚至我们想让基础类仅仅提供方法(行为)的定义,那么它就变成了接口(interface),这样三者的关系就很了然了。
了解了上面的关系和设计思想,虽然在 Python 中没有类似 abstract 和 interface 这些关键字,但是我们就可以自己实现一个类似的基础类,通过其他手段——比如入参校验和分层解耦——来进行限制,达到类似的功能。