接口测试学习-python第七课(面向对象编程)

以前都是面向过程编程,做一件事是按顺序来的,必须经过很多操作。现在是面向对象编程,将各种操作集合在一起,然后指挥其适用于多个场景。
上课时老师举了一个蛮贴切的例子,比如买车,面向过程就是先去学车,然后去4s店买车,然后去办证,然后保险,然后临时牌照,然后正式牌照。面向对象就像将这些所有步骤会经历的场景整合起来,直接开一个车辆
购置办证中心,然后从学车到办证甚至以后的缴纳罚款全都在这里处理。
在我的理解,面向对象就是给一些有共同性的事物先造一个模型,这个模型有这些事物共同的属性,也有这些事物共同的处理方法。然后一旦需要针对某个事物单独操作时,只要调用
这个模型,这个事物就可以根据已经配好的属性和方法很快的建造起来。
面向对象编程有几个基础的点,分别是类、构造函数、属性、方法、实例化。细化分还有类变量、实例变量、类方法、实例方法、析构函数、私有化、继承等等。
1、类
类是利用class定义的,如num1和num2,这两者的区别是类num2后面的括号里有“object”,前者被称为经典类,后者被称为新式类。没有很大的区别。
1 class num1():  
2     pass
3 
4 class num2(object):
5     pass

2、属性

属性其实就是变量,包括类变量(直接在类中定义的变量)和实例变量(在“def __init__(self):”下定义的变量)。

比如一个班有很多个学生,都生活在成都,学生们的年级、班级和年龄假设都是一样的,那么这些就是学生的共同属性,可以用变量先定义。

1 class Students():
2     county = 'China'  # 类变量,公共变量,每个实例都能用,可以节省内存
3     def __init__(self):
4         self.class = '高三二班'  # 实例变量
5         self.age = 18

3、方法

如果我们要打印这个班学生的姓名、班级和年龄。那么就得创造一个方法,也是一个函数。比如下面的print_info函数,就可以打印出每个对象的姓名、班级和年龄。

 1  class Students():
 2      county = 'China'  # 类变量,公共变量,每个实例都能用,可以节省内存
 3      def __init__(self, name):
 4           self.class = '高三二班'  # 实例变量
 5           self.age = 18
 6             self.name = name
 7  
 8      def print_info(self):
 9          print('学生的姓名是%s' % self.name)
10          print('学生的班级是%s' % self.class)
11          print('学生的年龄是%s' % self.age)

4、实例化

每一个类都是必须实例化才能使用的,不能那种车辆模型开车上路对吧,还是要有一辆真正的车才行。实例化就相当于对比着自己喜欢的模型得到一个真实的物品,这个物品是根据模型对比购买的,所以它拥有和模型同样的颜色、模样等等。所以实例化的对象是拥有类里面的属性和方法的。

 1  class Students():
 2      county = 'China'  # 类变量,公共变量,每个实例都能用,可以节省内存
 3      def __init__(self, name):
 4           self.class = '高三二班'  # 实例变量
 5           self.age = 18
 6           self.name = name
 7  
 8      def print_info(self):
 9          print('学生的姓名是%s' % self.name)
10          print('学生的班级是%s' % self.class)
11          print('学生的年龄是%s' % self.age)
12 
13 zxm = Student(name = '张晓明')  # 实例化
14 print(zxm.class)  # 输出结果为18
15 zxm.print_info()  # 会打印zxm这个对象的姓名、班级、年龄

5、构造函数和析构函数

构造函数就是类实例化时运行的函数,析构函数就是销毁实例化对象的函数。一般连接数据库后需要关闭数据库,这里可以将关闭数据库的代码放在析构函数中,这样执行完毕后自动销毁实例同时自动关闭链接。

 1 class MyDb(object):
 2     # 析构函数
 3     def __del__(self):
 4         self.cur.close()
 5         self.coon.close()
 6         print('over....')
 7     # 构造函数
 8     def __init__(self,
 9                  host,user,passwd,db,
10                  port=3306,charset='utf8'):
11         try:
12             self.coon = pymysql.connect(
13                 host=host,user=user,passwd=passwd,
14                 port=port,db=db,charset=charset,
15                 autocommit=True  # 自动提交,在非select语句时可以不需要再commit了
16             )
17         except Exception as e:
18             print('数据库链接失败!%s' % e)
19         else:
20             self.cur = self.coon.cursor(cursor=pymysql.cursors.DictCursor)

6、私有

变量分私有变量和公有变量,顾名思义,私有变量就是只能在类里面调用的不可修改的变量,而公有变量是在类外对象也可以调用修改的变量。私有变量的定义方法就是在变量名前面加两个下划线。

 1 import redis
 2 class My(object):
 3     def __init__(self):
 4         self.__host = '***.*.**.**'  # 私有变量
 5         self.__port = 6379
 6         self.__password = '*******'
 7 
 8         self.r = redis.Redis(host=self.host,port=self.port,password=self.password)
 9 
10     def get(self, k):
11         res = self.r.get(k)
12         if res:
13             return res.decode()
14         return None
1 my = My()  #实例化
2 my.port = 9999  # port是私有变量无法修改
3 print(my.__host)  # host是私有变量,无法在类外调用
4 my.__close()  # close是私有方法,无法在类外调用

7、继承

定义新式类时括号中一般会写“object”,其实这就是定义的类继承了object类。所以写在括号中的类就是定义的类所要继承的类。被继承的类可以成为父类或者基类,新的类成为子类。子类可以继承父类的所有属性和方法,并可以定义自己的属性和方法且不会影响父类。

比如下面,定义了一个连接数据库的基础类,这个类有一些属性如host、port、password等等。而不论连接mysql数据库或者redis数据库都会用到这些属性。那么定义MySQL类和redis类时就可以直接继承Base类,这样host、port、password这些属性就可以直接使用了。

 1 class Base(object):
 2     def __init__(self, host, port, password):
 3         self.host = host
 4         self.port = port
 5         self.password = password
 6 
 7 
 8 class Mysql(Base):
 9     pass
10 
11 
12 class Redis(Base):
13     pass

 

 

 



posted on 2018-05-25 23:56  四方城郭  阅读(259)  评论(0编辑  收藏  举报