zoukankan      html  css  js  c++  java
  • 接口测试学习-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


  • 相关阅读:
    Android开发规范
    驱动开发规范
    USER 版本与ENG 版本差异
    解决:更改短信中心号码不能及时更新显示
    深度分析:Android中Mms设置页面更改短信中心号码流程
    Android中Parcel的分析以及使用
    DialogFragment详解
    开启飞行模式,进入信息,再关闭飞行模式,进入信息设置查看短信息中心号码,有时短信息中心号码显示无。
    研究 iOS 摄像头缩放的内容
    iOS图片缓存库基准对比
  • 原文地址:https://www.cnblogs.com/myyard777/p/9091124.html
Copyright © 2011-2022 走看看