python-__init__的作用--url编码解码--参数化--单例模式--day(9)

一、__init__的作用

tools文件夹下有两个文件,mysql.py和redis.py,想要引用tools文件下两个文件

 

 

 1、当__init__文件内容如下

 

 

a.py和tools同目录

 

 

文件引用会执行__init__文件

 

 想要引用tools目录下的两个文件,会报错

 

 

 在__init__下引用两个文件就不会报错

 

 二、urllib.parse拼接url,防止因为多输入‘/’,导致url不正确

 

 三、url编码,解码

 

 

 引用其他目录下的文件标红报错,解决方式--增加环境变量  项目根目录--右键,选择如下图

 

 四、获取setting文件的根目录:

1 base_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#目录如何写:不能写成死的,显示获取setting,然后是config,然后是utp_ymy获取到跟目录
2 # os.path.abspath(__file__):获取当前目录setting
3 # os.path.dirname(os.path.abspath(__file__))#获取上一级目录 config
4 # os.path.dirname(os.path.dirname(os.path.dirname(__file__)))#获取config目录的上一级目录utp,得到根目录

 



五、参数化:

import jsonpath
import os
import xlrd

from config.setting import log
def get_value(dic, key):
    '''
    这个函数是从一个字典里面,根据key获取vlaue
    :param dic:传一个字典
    :param key:传一个
    :return:如果有,返回key取到value,如果key没有,返回空字符串
    '''
    result = jsonpath.jsonpath(dic, '$..%s' % key)
    if result:
        return result[0]
    return ''


class GetTestData:

    @staticmethod
    def data_for_txt(file_name):
        log.debug('开始读取参数化文件%s' % file_name)
        if os.path.exists(file_name):#判断文件存在
            with open(file_name, encoding='utf-8') as fr:
                data = []
                for line in fr:
                    if line.strip():
                        line_data = line.strip().split(',')
                        data.append(line_data)
            return data
        log.error('%s参数化文件不存在' % file_name)
        raise Exception('%s参数化文件不存在' % file_name)

    @staticmethod
    def data_for_excel(file_name, sheet_name=None):
        log.debug('开始读取参数化文件%s' % file_name)
        if os.path.exists(file_name):
            data = []
            book = xlrd.open_workbook(file_name)
            if sheet_name:
                sheet = book.sheet_by_name(sheet_name)
            else:
                sheet = book.sheet_by_index(0)
            for row_num in range(1, sheet.nrows):#跳过表头,不取第一行0
                row_data = sheet.row_values(row_num)
                data.append(row_data)
            return data
        log.error('%s参数化文件不存在' % file_name)
        raise Exception('%s参数化文件不存在' % file_name)

 


六、单例模式
 1 class Person:
 2     def __init__(self):
 3         self.name = 'dd'
 4 p1 = Person()
 5 p2 = Person()
 6 p1.name = 'aa'
 7 print(p1.name)
 8 print(id(p1))
 9 print(p2.name)
10 print(id(p2))

 

 

 使用单例模式后,所有实例化结果都一样

 1 class Person:
 2     __instance = None
 3     def __init__(self):
 4         self.name = 'dd'
 5 
 6     def __new__(cls, *args, **kwargs):  # 在__init__执行的
 7         if cls.__instance:  # 判断如果实例值不为空
 8             return cls.__instance  # 返回这个实例
 9         cls.__instance = super().__new__(cls)  # 说明是第一次实例,调用父类的__new__的方法,存在cls.__instance,产生一个类 )
10         return cls.__instance  # 返回这个实例
11 
12 p1 = Person()
13 p2 = Person()
14 p1.name = 'aa'
15 print(p1.name)
16 print(id(p1))
17 
18 print(p2.name)
19 print(id(p2))

 

 

 



posted @ 2019-11-26 17:18  洛歆陌离  阅读(203)  评论(0编辑  收藏  举报