项目组golang和python混用,接着机会对这两门语言的oop编程做个总结。
首先对这两门语言在web开发领域的认识。
golang是静态语言的先进代表 -- 强类型,面向接口编程,高效携程机制,非常适合并发处理的项目“存储,音视频,网络通信”
python则是动态语言的不二模范 -- 自动判断类型,面向菜鸟(我)编程,生态比较好“自动化开发,小型项目快速启动,内部项目孵化”
接下来,我们以接口为例,对接口进行理解:
通常用接口来定义实现类的外观,也就是实现类的行为定义,用来约束实现类的行为。接口就相当于一份契约,根据外部应用需要的功能,约定了实现类应该要实现的功能,但是具体的实现类除了实现接口约定的功能外,还可以根据需要实现其他一些功能。这是允许的。他就是说实现类的功能包含但不仅限于接口约束功能。
通过使用接口,可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系,接口就是实现类对外的外观。
1. 接口的统一规范作用
1.1 这点在golang比较好理解,对于日益复杂的系统,接口可以对类进行规划从而统一函数入口
当 Dog2类没有Eat() 函数的时候,程序就会报错。提醒接口需要完全实现其中的方法。main函数中 animalMap 对象,test函数,接口都起到了统一规范的作用。
1.2 谈回python,python是没有接口的,因为它是多继承,且又因为它是纯动态语言,完全限制不住它的传参。想要规范python,想啥呢?
首先,到对于python 动态语言而言,函数本身就支持统一传参。其次,python 不会检查代码结构性确实,当 Dog2类没有Eat() 函数的时候,程序并不会报错,只有执行adopt2的时候,才会报错。最后,相比golang,缺少像静态语言强类型语言的规范和约束。
2. 依赖反转
依赖反转,就是将具有依赖关系的类,进行解耦。
2.1 golang的实现
(1)接口注入
(2)构造注入
2.2 python的实现
可以根据需要动态地把某种依赖关系注入到对象中,使得模块的设计更加独立。同时,依赖注入也是多态的一种实现方式。常用的依赖注入途径有接口注入、Set注入和构造注入三种。另外,反射也属于比较常用的依赖注入技术之一,可以根据给定的不同信息创建不同类型的对象。
(1)接口注入
该技术首先定义一个接口类,然后在继承了该接口的类中实现特定的接口方法,而在接口方法中根据传入参数的不同做出不同的行为。
上面代码运行结果为:
<__main__.A object at 0x00000000033F6B70>
<__main__.B object at 0x000000000339B470>
(2)Set注入
这种注入方式是通过类本身提供的一个方法用来注入不同类型的对象来设置自身对象和其他对象的依赖关系。
(3)构造注入
这种注入方式是在创建类的实例时为构造方法传入不同类型的对象实现的。