Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库
2016-08-21 21:04
411 查看
装饰器其实也是一个函数,它的参数是一个函数 ; 其它函数与装饰器之间建立联系是通过 @装饰器函数名, 感觉有点像Spring的面向切面编程
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/6bac103ddba0edb486fed25f570761b7.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/e5b304a8415d730b84713fedfd81e7ad.png)
装饰器函数,如何处理原函数的参数.?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/f274d2e190c1cab7785c8dfe23799a74.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/b6fc61304a7247fc5b321c7ba43688d9.png)
装饰器 原函数返回值的处理
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/0faf56d8d1b3db0a1499ceb478f249ea.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/c8d8ba81d200a49e7b9ed80a39e6bc93.png)
类与对象 , self相当于其它语言中的 this
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/bfd794eae69746ba2aeec970885ce074.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/6eddb38fb6d72962868826bb0c422eac.png)
类的静态属性和动态属性
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/2f0903f3d7b3d99a2821d2d6f3567e67.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/72f9dd719c5e8ec86da8249a783e80fe.png)
静态方法和动态方法
静态方法的参数中是没有 self的.
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/b03dc65f46a332503a1aafdee79b4293.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/07efa2e5ce663627eedaae81550a6eb4.png)
特性
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/fb16f3cbd3e8e638fc712250d1e1dac0.png)
私有方法和私有属性 : __开头
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/9cefaa628263ba68248bc9b670f8a99d.png)
类提供访问私有属性的方式 只读@property 可写 @方法名.setter
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/2a66437cb02b528f4cbe3a092a00cbbc.png)
类的 构造方法__init__() 、 析构方法 __del__()
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/e2b42ff5ed86cc0044ce722e70e07e5d.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/0a3dd24c6dcc093a3b9a06368642fd1b.png)
继承
继承时调用父类的方法(包括构造)都可以使用 Father.methodname(self)
推荐基类都继承自object,继承于object的类称为新式类,不继承object的叫经典类
新式类兼容经典类,同时增加了一些属性和方法,经典类在多继承时有一个问题
经典类的继承是深度优先(D-- B--A--C--A),新式类的继承是广度优先(D--B--C--A)
Python 2.x中默认都是经典类,只有显式继承了object才是新式类
Python 3.x中默认都是新式类,不必显式的继承object
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/8c402d3699ca94910efe84317b668646.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/3b9a34fb174ef7073b431df9504d2734.png)
Python里面的接口 = 抽象类 + 抽象方法, 见如下例子代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/e9822430814b2395f037992c3d8d0428.png)
异常
捕获异常 try :
except XXXError,e:
多个错误时 (except XXXError,YYYError) ,e
// e为具体的异常信息
except Exception , e: //可以捕获所有的异常
else:
print '没有任何错误'
finally:
print '无论是否有异常都会执行'
自定义异常与手动抛出一个异常
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/b896aa588f42a958dbd03dcba459e7b5.png)
[b]连接数据库[/b]
Python操作Oracle数据库 参考: http://blog.csdn.net/kongxx/article/details/7107661
连接Oracle数据库的几种方式 : http://www.cnblogs.com/ylqmf/archive/2012/04/16/2451841.html
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/2adf3cc5e12cc0ed29c2a61d23df922c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/d6a63d8ef84030dbb1ddc2eb8a38191f.png)
查询
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/2d0ece95731942d58d2946af449b88aa.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/5f86679683a7a0208ba532774bf48b30.png)
参数占位符 , dml语句需要手动 commit()
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/7c34c58f0cd8ccd3ee23488e995dda82.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/f9fc4ac34da540d2dbd143db9bc72be8.png)
[b] 名称占位符:[/b]
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/203498785c8074e11059cfbc577baaa8.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/1942e6378f210b3c5307ecadbc2a12f6.png)
一次插入多条数据:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/3eb44b3a63e39b5b65742fdbcad9e492.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/0f5f8a96fc27cf2106957cff07b7ba64.png)
conn.cursor()查询时的显示内容
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/68ab5a18d693456eaeebbf764ec74567.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/9334c3e20e21c5721a53c1c398a69f14.png)
-----------------mysql have-----------Oracle haven't--------------------
#查询时, 每套数据是以字典的形式显示
#mysql 的写法
#conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)
# 游标的挪动 到指定位置 模式有 relative absolute
#cursor.scroll(value=0,mode='absolute')
#插入数据之后,获取那条数据的自增主键值 cursor.lastrowid
Oracle好像没看到...
-----------------mysql have-----------Oracle haven't--------------------
cx_Oracle 的官方文档地址 : http://cx-oracle.readthedocs.io/en/latest/index.html
一篇对Oracle操作比较好的文章 : http://blog.sina.com.cn/s/blog_955ad7dc0102vep0.html
#fetchall() 获取所有查询到的数据
#fetchone() 第一次拿一条,第二次调用拿第二条,依次类推
#fetchmany(n) 从当前游标开始拿N条数据
[b]预编译sql,然后再执行[/b]
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/7a77137d4d3dafb8dbb04d926ed3c37c.png)
Python操作Mysql数据库
mysql连接时使用如下形式:
conn=MySQLdb.connect(host='localhost',user='root',passwd='root',db='test',port=3306)
conn=MySQLdb.connect('ip','user','password','db')
具体参考文档 : http://pan.baidu.com/s/1jI0hm4Y
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/6bac103ddba0edb486fed25f570761b7.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/e5b304a8415d730b84713fedfd81e7ad.png)
装饰器函数,如何处理原函数的参数.?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/f274d2e190c1cab7785c8dfe23799a74.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/b6fc61304a7247fc5b321c7ba43688d9.png)
装饰器 原函数返回值的处理
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/0faf56d8d1b3db0a1499ceb478f249ea.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/c8d8ba81d200a49e7b9ed80a39e6bc93.png)
类与对象 , self相当于其它语言中的 this
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/bfd794eae69746ba2aeec970885ce074.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/6eddb38fb6d72962868826bb0c422eac.png)
类的静态属性和动态属性
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/2f0903f3d7b3d99a2821d2d6f3567e67.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/72f9dd719c5e8ec86da8249a783e80fe.png)
静态方法和动态方法
静态方法的参数中是没有 self的.
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/b03dc65f46a332503a1aafdee79b4293.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/07efa2e5ce663627eedaae81550a6eb4.png)
特性
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/fb16f3cbd3e8e638fc712250d1e1dac0.png)
私有方法和私有属性 : __开头
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/9cefaa628263ba68248bc9b670f8a99d.png)
类提供访问私有属性的方式 只读@property 可写 @方法名.setter
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/2a66437cb02b528f4cbe3a092a00cbbc.png)
类的 构造方法__init__() 、 析构方法 __del__()
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/e2b42ff5ed86cc0044ce722e70e07e5d.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/0a3dd24c6dcc093a3b9a06368642fd1b.png)
继承
继承时调用父类的方法(包括构造)都可以使用 Father.methodname(self)
推荐基类都继承自object,继承于object的类称为新式类,不继承object的叫经典类
新式类兼容经典类,同时增加了一些属性和方法,经典类在多继承时有一个问题
经典类的继承是深度优先(D-- B--A--C--A),新式类的继承是广度优先(D--B--C--A)
https://docs.python.org/release/2.2.3/whatsnew/sect-rellinks.html class A: ^ ^ def save(self): ... / \ / \ / \ / \ class B class C: ^ ^ def save(self): ... \ / \ / \ / \ / class D
Python 2.x中默认都是经典类,只有显式继承了object才是新式类
Python 3.x中默认都是新式类,不必显式的继承object
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/8c402d3699ca94910efe84317b668646.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/3b9a34fb174ef7073b431df9504d2734.png)
Python里面的接口 = 抽象类 + 抽象方法, 见如下例子代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/e9822430814b2395f037992c3d8d0428.png)
异常
捕获异常 try :
except XXXError,e:
多个错误时 (except XXXError,YYYError) ,e
// e为具体的异常信息
except Exception , e: //可以捕获所有的异常
else:
print '没有任何错误'
finally:
print '无论是否有异常都会执行'
自定义异常与手动抛出一个异常
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/b896aa588f42a958dbd03dcba459e7b5.png)
[b]连接数据库[/b]
Python操作Oracle数据库 参考: http://blog.csdn.net/kongxx/article/details/7107661
连接Oracle数据库的几种方式 : http://www.cnblogs.com/ylqmf/archive/2012/04/16/2451841.html
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/2adf3cc5e12cc0ed29c2a61d23df922c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/d6a63d8ef84030dbb1ddc2eb8a38191f.png)
查询
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/2d0ece95731942d58d2946af449b88aa.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/5f86679683a7a0208ba532774bf48b30.png)
参数占位符 , dml语句需要手动 commit()
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/7c34c58f0cd8ccd3ee23488e995dda82.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/f9fc4ac34da540d2dbd143db9bc72be8.png)
[b] 名称占位符:[/b]
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/203498785c8074e11059cfbc577baaa8.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/1942e6378f210b3c5307ecadbc2a12f6.png)
一次插入多条数据:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/3eb44b3a63e39b5b65742fdbcad9e492.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/0f5f8a96fc27cf2106957cff07b7ba64.png)
conn.cursor()查询时的显示内容
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/68ab5a18d693456eaeebbf764ec74567.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/9334c3e20e21c5721a53c1c398a69f14.png)
-----------------mysql have-----------Oracle haven't--------------------
#查询时, 每套数据是以字典的形式显示
#mysql 的写法
#conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)
# 游标的挪动 到指定位置 模式有 relative absolute
#cursor.scroll(value=0,mode='absolute')
#插入数据之后,获取那条数据的自增主键值 cursor.lastrowid
Oracle好像没看到...
-----------------mysql have-----------Oracle haven't--------------------
cx_Oracle 的官方文档地址 : http://cx-oracle.readthedocs.io/en/latest/index.html
一篇对Oracle操作比较好的文章 : http://blog.sina.com.cn/s/blog_955ad7dc0102vep0.html
#fetchall() 获取所有查询到的数据
#fetchone() 第一次拿一条,第二次调用拿第二条,依次类推
#fetchmany(n) 从当前游标开始拿N条数据
[b]预编译sql,然后再执行[/b]
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/7a77137d4d3dafb8dbb04d926ed3c37c.png)
Python操作Mysql数据库
mysql连接时使用如下形式:
conn=MySQLdb.connect(host='localhost',user='root',passwd='root',db='test',port=3306)
conn=MySQLdb.connect('ip','user','password','db')
具体参考文档 : http://pan.baidu.com/s/1jI0hm4Y
相关文章推荐
- (十)Core Java 面向对象(封装,继承,多态,接口) -02 (96)
- 项目过程中如何使用面向对象的特征:继承,封装,多态,接口
- 面向对象的继承、封装、多态、抽象、接口相关
- Python基础(6)- 类和对象(使用、继承、派生、组合、接口、多态、封装、property、staticmethod、classmethod、反射、slots、上下文管理协议、元类)
- python面向对象三大特性之继承、多态、封装
- 初学Python的学习笔记8----面向对象、数据封装、访问限制、继承和多态
- Jser 设计模式系列之面向对象 - 接口封装与继承
- Python入门:老男孩python第四天(L04-04-03-python异常处理02)练习题纠正
- Python 学习笔记 - 面向对象(封装,继承和多态)
- Python 学习笔记 - 面向对象(封装,继承和多态)
- Java-面向对象(继承、封装、多态、内部类、异常)
- java 面向对象三大特性(封装,继承,多态)以及抽象、接口的介绍
- 黑马程序员————面向对象(继承,抽象类,接口,多态,异常)
- java 面向对象三大特性(封装,继承,多态)以及抽象、接口的介绍
- 利用架构实例解析面向对象的封装,多态,继承,接口,泛型
- 初识JAVA(【面向对象】:pub/fri/pro/pri、封装/继承/多态、接口/抽象类、静态方法和抽象方法;泛型、垃圾回收机制、反射和RTTI)
- OC学习笔记02-OC中的面向对象语法表现 - 封装 继承与多态
- Python基础(面向对象之封装与继承)
- java 面向对象三大特性(封装,继承,多态)以及抽象、接口的介绍
- 【python学习笔记】Python面向对象的理解(封装,继承,多态)