面向对象编程(以Python为例)
2016-02-24 14:56
471 查看
摘要: 在Python 编程实践中,对面向对象编程的一些收获
面向对象编程要解决的根本问题之一是实现代码复用,通过抽象出一类逻辑的行为以及属性来实现复用的目的,具体逻辑通过继承基类重写方法配置属性实现实例个性化
Python 类的继承
代码:
结果:
在编码过程中经常会用到class,但是去看写过的代码,其中用class的地方很多的都是将class单纯地用作一种属性和方法的集合,而忽视了class中“行为”与“继承”的使用方法。
在一个能够抽象出行为逻辑的功能中,如果得当的使用class,在基类中抽象出”行为“在继承基类的子类中定义或实现特殊(或意为特例)的属性或方法,这能够很好的为代码解耦,同时一个基类能够描述一类行为,而对于行为的特殊实例只需要定制子类就能够实现需求。所以合理有效的使用面向对象的方式方法能够有效的组织代码、减少编码量,使代码便于维护便于改动
注: class A(object): 这种类型的定义是新类的定义方法,支持super(type,self).__init__(params)这种形式的调用,如果定义类型 为 class A: 这种形式则会在调用super函数的地方报错,第二种类的定义方法是旧类
与类相关的一些模式:
模板方法模式:在一个方法中定义一个算法骨架,并将一些实现逐步延迟到子类中[1],一种思路就是在父类中定义各个方法执行顺序(算法)。在子类中重载方法,实现定制..
参考文献:
[1].《编写高质量python代码》 张颖,赖勇浩著,机械工业出版社 P132
面向对象编程要解决的根本问题之一是实现代码复用,通过抽象出一类逻辑的行为以及属性来实现复用的目的,具体逻辑通过继承基类重写方法配置属性实现实例个性化
Python 类的继承
代码:
#!/usr/bin/env python # -*- coding: utf-8 -*- # time @2016/3/7 11:28 create by JasonYang class Animal(object): def __init__(self, name): self.name = name print "小动物 %s 出生了" % name def eat(self): pass def sleep(self): pass def live(self): self.eat() self.sleep() class Pig(Animal): def __init__(self, name): self.name = name super(self.__class__, self).__init__(name) def eat(self): print '%s 吃粮食' % self.name def sleep(self): print '%s 趴着睡' % self.name class Horse(Animal): def __init__(self, name): self.name = name print self.__class__ super(self.__class__, self).__init__(name) def eat(self): print '%s 吃青草' % self.name def sleep(self): print '%s 站着睡' % self.name if __name__ == '__main__': pig = Pig('pig') horse = Horse('horse') pig.live() horse.live()
结果:
D:\Python27\python.exe E:/workspace/jjww/src/main.py 小动物 pig 出生了 <class '__main__.Horse'> 小动物 horse 出生了 pig 吃粮食 pig 趴着睡 horse 吃青草 horse 站着睡 Process finished with exit code 0
在编码过程中经常会用到class,但是去看写过的代码,其中用class的地方很多的都是将class单纯地用作一种属性和方法的集合,而忽视了class中“行为”与“继承”的使用方法。
在一个能够抽象出行为逻辑的功能中,如果得当的使用class,在基类中抽象出”行为“在继承基类的子类中定义或实现特殊(或意为特例)的属性或方法,这能够很好的为代码解耦,同时一个基类能够描述一类行为,而对于行为的特殊实例只需要定制子类就能够实现需求。所以合理有效的使用面向对象的方式方法能够有效的组织代码、减少编码量,使代码便于维护便于改动
注: class A(object): 这种类型的定义是新类的定义方法,支持super(type,self).__init__(params)这种形式的调用,如果定义类型 为 class A: 这种形式则会在调用super函数的地方报错,第二种类的定义方法是旧类
与类相关的一些模式:
模板方法模式:在一个方法中定义一个算法骨架,并将一些实现逐步延迟到子类中[1],一种思路就是在父类中定义各个方法执行顺序(算法)。在子类中重载方法,实现定制..
参考文献:
[1].《编写高质量python代码》 张颖,赖勇浩著,机械工业出版社 P132
相关文章推荐
- python 双向链表
- python学习笔记五--文件
- windows下python2.7版本numpy,Scipy,matplotlib安装
- python+eclipse+pydev
- Python 3.4编程教程
- Python之模块介绍
- python学习笔记四--元组
- python 单链表
- Python语言特性(一)
- NumPy简介
- Python——类的设计
- Python字符串前缀U和R的区别
- 【LEETCODE】61- Rotate List [Python]
- Python——类的设计
- python程序打包示例
- python操作cfg配置文件
- python 字符串/元组/列表/字典互转
- python程序的调试方法
- python3.4标准库介绍
- python异常处理体系