深入学习Django源码基础2 - python多态技巧-运行时判断函数
2013-08-31 00:44
776 查看
学习高级语言,大家都会学习到继承,复合。对于继承,最大的优势是实现了接口和多态。
对于通过继承实现的接口部分。 C++多重继承 实现解耦,mvc分离 这里有示例。
多态部分其他语言都有讲解。
今天发现1个python实现多态的优势。
相比较java,c++的多态,需要继承的方法在基类必须定义以后,才能编译通过。(吐槽一下,大部分C++和java代码是告诉编译器如何理解代码,构建代码)
但是python的代码是动态的,代码也是数据,数据又不需要申明,运行时判断的。也就是说,调用方法可以不需要申明。
命令行演示代码如下
其中在Base的printname中,self.function在基类并没有实现。
理解起来,这比其他编译型语言少了1个告诉编译器申明的优势。让代码更简介。(写不好也会增加复杂度 )
对于通过继承实现的接口部分。 C++多重继承 实现解耦,mvc分离 这里有示例。
多态部分其他语言都有讲解。
今天发现1个python实现多态的优势。
相比较java,c++的多态,需要继承的方法在基类必须定义以后,才能编译通过。(吐槽一下,大部分C++和java代码是告诉编译器如何理解代码,构建代码)
但是python的代码是动态的,代码也是数据,数据又不需要申明,运行时判断的。也就是说,调用方法可以不需要申明。
命令行演示代码如下
>>> class Base(object): ... def __init__(self, name): ... self.name = name ... def printname(self): ... print self.function(), self.name ... >>> class Sub1(Base): ... def __init__(self): ... super(Sub1, self).__init__('Sub1') ... def function(self): ... return 'sub1 function' ... >>> sub = Sub1() >>> sub.printname() sub1 function Sub1
其中在Base的printname中,self.function在基类并没有实现。
理解起来,这比其他编译型语言少了1个告诉编译器申明的优势。让代码更简介。(写不好也会增加复杂度 )
相关文章推荐
- 深入学习Django源码基础7 - python的gettext国际化本地化
- 深入学习Django源码基础4 - python的动态延时加载技术(lazy)
- 深入学习Django源码基础1 - 深刻理解Python中的元类(metaclass)
- 深入学习Django源码基础3 - python提供的对象默认方法
- 深入学习Django源码基础17 - django中messagee分析学习
- 深入学习Django源码基础9 - 简单分析DjangoORM部分
- 深入学习Django源码基础13 - Django中的中间件(middleware)
- 深入学习Django源码基础12 - 简要分析Django中template模块2
- 深入学习Django源码基础15 - views简要分析学习
- 深入学习Django源码基础16 - django中信号的学习分析
- 深入学习Django源码基础5 - utils中archive技巧
- 深入学习Django源码基础10 - Django中http模块
- 深入学习Django源码基础14 - Django中forms简要分析
- 深入学习Django源码基础11 - 简要分析Django中template模块1
- 深入学习Django源码基础6 - utils中dateformat.py学习
- 深入学习Django源码基础8 - Django中系统级国际化本地化
- python--基础学习(二)判断 、循环、定义函数、继承、调用
- 零基础入门学习Python(19)--函数:我的地盘听我的
- PYTHON基础学习之操作类的一些函数
- Day3 Python基础学习——文件操作、函数