Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

装饰器其实也是一个函数,它的参数是一个函数 ; 其它函数与装饰器之间建立联系是通过 @装饰器函数名, 感觉有点像Spring的面向切面编程

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

装饰器函数,如何处理原函数的参数.?

 Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

 装饰器 原函数返回值的处理 

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

类与对象 , self相当于其它语言中的 this

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

 类的静态属性和动态属性

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

 静态方法和动态方法

静态方法的参数中是没有 self的.

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

 特性

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

 私有方法和私有属性  : __开头

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

类提供访问私有属性的方式  只读@property  可写 @方法名.setter

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

 类的 构造方法__init__() 、 析构方法 __del__()

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

 继承

继承时调用父类的方法(包括构造)都可以使用 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

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

 Python里面的接口 = 抽象类 + 抽象方法,  见如下例子代码

 Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

异常

捕获异常  try  :

              except XXXError,e:

              多个错误时  (except XXXError,YYYError) ,e

      // e为具体的异常信息

             except Exception , e: //可以捕获所有的异常

             else:

      print '没有任何错误'

             finally:

      print '无论是否有异常都会执行'

自定义异常与手动抛出一个异常  

 Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

连接数据库

Python操作Oracle数据库  参考: http://blog.csdn.net/kongxx/article/details/7107661

连接Oracle数据库的几种方式 : http://www.cnblogs.com/ylqmf/archive/2012/04/16/2451841.html 

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

查询

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

参数占位符 ,  dml语句需要手动 commit()

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

 名称占位符:

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

 

一次插入多条数据: 

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

conn.cursor()查询时的显示内容

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

 -----------------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条数据

预编译sql,然后再执行

 Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

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