工作生活

学习_03_面向过程_面向函数_面向对象教程

2019-07-06  本文已影响0人  雷阳洪

菜鸟教程

#!/usr/bin/python3
# 一个简单的类实例
class Complex:
    i = '12345'
    def f(self):
        return 'hello world'
    # 类定义了 __init__() 方法,类的实例化操作会自动调用 __init__() 方法。对应的 __init__() 方法就会被调用
    # __init__() 方法可以有参数,参数通过 __init__() 传递到类的实例化操作上

    def __init__(self, realpart, imagpart):
        # 声明两个局部变量,只作用于__init__()方法,两个变量相加做运算
        self.r = realpart + imagpart


# 创建了一个新的类实例并将该对象赋给局部变量 x,x 为空的对象。 传入参数123和124
x = Complex(123,124)
# 访问类的属性和方法
print("访问x类的属性:" + x.i)  # 访问属性
print("访问x的f方法" + x.f())  # 访问方法
# 打印x类中的r属性
print("realpart + imagpart" + "=" + str(x.r))
# 类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。
class Test:
    def prt(self):
        # 打印self,self 代表的是类的实例,代表当前对象的地址
        print(self)
        #  self.class 则指向类
        print(self.__class__)
    # self 不是 python 关键字,我们把他换成 runoob 也是可以正常执行的
    def prt2(runoob):
        print(runoob)
        print(runoob.__class__)

# 创建了一个新的类实例并将该对象赋给局部变量 a,a 为空的对象


# 实例化类
a = Test()
a.prt()
a.prt2()


# 类的方法
class people:
    # 定义人的基本属性,比如说名字,年龄,性别
    name = ''
    age = 0
    sex = ''

    # 定义构造的方法,比如一个人的行为举止,动作,说话,吃饭,睡觉,写代码
    # __init__() 方法传入参数,参数通过 __init__() 传递到类的实例化操作上
    def __init__(self, n, a, s):
        self.name = n
        self.age = a
        self.sex = s

    # 定义一个方法,动作行为:说话
    def speak(self):
        print("%s 说:我今年%d岁,性别为%s" % (self.name, self.age, self.sex))

    # 定义一个方法,动作行为:吃饭
    def eat(self):
        print("%s现在正在吃饭" % (self.name))

    # 定义一个方法,动作行为:睡觉
    def sleep(self):
        print("%s吃完了饭,正在睡觉" % (self.name))


# 实例化类
p = people('雷阳洪', 23, '男')
p.speak()
p.eat()
p.sleep()

果芽学习

# 面向过程编程
name = '张三'
age = 16
nickname = ''
if age < 18:
    nickname = '小鲜肉'
elif age in range(18, 30):
    nickname = '男神'
else:
    nickname = '油腻大叔'


name1 = '李四'
age1 = 26
nickname1 = ''
if age1 < 18:
    nickname1 = '小鲜肉'
elif age1 in range(18, 30):
    nickname1 = '男神'
else:
    nickname1 = '油腻大叔'


name2 = '王二麻子'
age2 = 31
nickname2 = ''
if age2 < 18:
    nickname2 = '小鲜肉'
elif age2 in range(18, 30):
    nickname2 = '男神'
else:
    nickname2 = '油腻大叔'
print(name2 + ',' + str(age2) + ',' + nickname2)


# 面向函数编程
'''
面向函数编程,将运算过程封装成一个函数,用来判断age的昵称.
函数本身不会执行,必须调用才能执行
以下代码才是执行步骤,根据执行步骤执行:1234
'''
# 4.执行函数,处理age的昵称 ,返回给nickname变量存起来
def get_nickname(age):
    if age < 18:
        nickname = '小鲜肉'
    elif age2 in range(18, 30):
        nickname = '男神'
    else:
        nickname = '油腻大叔'
    return nickname


# 1.name 变量 赋值 '张三'
name = '张三'
# 2.age 变量赋值 18
age3 = 18
# 3.调用get_nickname函数,传入age变量
nickname = get_nickname(age3)
# 5.打印处理后的name+age+nickname
print(name + ',' + str(age3) + ',' + nickname)

面向对象编程

class People:
    # 2.定义People类的初始变量
    name = ''
    age = 0
    nick_name = ''

    # 3.初始化方法,默认调用init方法,调用类 People('张三', 17) 括号里的参数进行赋值
    def __init__(self, n, a):
        self.name = n # self.name = '张三'
        self.age = a # self.age = '17'
        # 4.调用nick_name函数,判断nick_name变量的昵称之后,返回给p变量
        self.nick_name()
    # 5.判断p变量传入的age,得出nick_name 的昵称(self代表的是p变量的地址,self.age=17)
    # 如果p的内存里面没有nick_name变量,python自动新建nick_name变量并赋值.
    # 此时nick_name = 小鲜肉 
    def nick_name(self):
        if self.age < 18:
            self.nick_name = '小鲜肉'
        elif self.age in range(18, 30):
            self.nick_name = '男神'
        else: self.nick_name = '老男人'
        return self.nick_name


# 1.引用People类,传入参数'张三',17  赋值给p变量
p = People('张三', 17)

# 6.最后打印p的name  age  nick_name
print(p.name + str(p.age) + p.nick_name)

动态获取ini配置文件里面的url和mysql的配置信息做接口自动化

文件名:config_dev.ini

#果芽url
[API_GY_DEV]
host = dev.guoyasoft.com
port = 8080
protocal = http
#果芽mysql配置
[DB_GY_DEV]
host = qa.guoyasoft.com
port = 3306
db = guoya_virtual_mall_1811
user = root
passwd = Guoya006
charset = utf8

工具类

文件名:config_tool

# 这是一个获取本地config_dev.ini文件中的url的配置信息的工具类
import configparser
import os


class ConfigTool:
    def __init__(self):
        # 返回脚本的路径
        cur_path = os.path.dirname(__file__).replace('\\','/')
        # find() 方法检测字符串中是否包含子字符串 str  查看当前路径是否有's04-leiyh'文件夹
        # 获取该文件夹的总长个数.9个
        # 获取's04-leiyh'项目的绝对路径 先查找's04-leiyh'项目之前的路径的个数
        # 再获取's04-leiyh'项目的长度,最后索引获取展示's04-leiyh'项目的绝对路径
        root_path = cur_path[:cur_path.find('s04-leiyh') + len('s04-leiyh')]
        # 拿到config_dev.ini配置文件的路径 赋值给file_path变量
        file_path = '/week3/config/config_dev.ini'
        # 字符串拼接,拿到config_dev.ini配置文件的绝对路径
        file_name = root_path + file_path
        print(file_name)
        # 初始化实例,configparser模块的ConfigParser()类 赋值给config
        self.config = configparser.ConfigParser()
        # 读取配置文件,file_name 是配置文件的绝对路径
        self.config.read(file_name)

    # 定义一个用来获取配置文件中的命名部分(section)的选项值(option)的方法
    def get_conf(self, section, option):
        # 返回配置文件中获取section和option的值
        return self.config.get(section, option)
# 这是读取本地config_dev.ini文件中的mysql的配置信息的工具类
import pymysql
import week3.tools.config_tool as config_tool


class DBTool:
    # 读取数据库
    def __init__(self):
        # 调用config_tool.ConfigTool()类,赋值给conf变量 读取数据库的配置信息
        conf = config_tool.ConfigTool()
        self.host = conf.get_conf('DB_GY_DEV', 'host')
        self.port = int(conf.get_conf('DB_GY_DEV', 'port'))
        self.db = conf.get_conf('DB_GY_DEV', 'db')
        self.user = conf.get_conf('DB_GY_DEV', 'user')
        self.passwd = conf.get_conf('DB_GY_DEV', 'passwd')
        self.charset = conf.get_conf('DB_GY_DEV', 'charset')

    # 配置数据的连接信息,建立连接
    def get_connect(self):
        conn = pymysql.connect(
            host=self.host,
            port=self.port,
            db=self.db,
            user=self.user,
            passwd=self.passwd,
            charset=self.charset
        )

        self.conn = conn

    # 执行一条sql命令
    def query_one(self, sql):
        self.cursor = self.conn.cursor(pymysql.cursors.DictCursor)
        self.cursor.execute(sql)
        # 获取一条数据
        row = self.cursor.fetchone()
        # 返回获取的数据
        return row
    # 断开
    def close(self):
        self.cursor.close()
        self.conn.close()

登陆自动化接口代码

#这个脚本实现的功能是利用python的requests类动态获取url和动态获取请求参数发送post请求的一个脚本
import pymysql
import week3.tools.config_tool as config_tool
import week3.tools.mydb_tool as mydb_tool
import requests

# 1. swagger查看登录接口
# 2. 新增test_case包,写test_login.py模块,使用requests模块实现接口调用
# 3. 新增config包,添加config.ini配置文件,配置api和db配置
# 4. 新增tools包,添加config_tool.py和db_tool.py
# 5. 使用config_tool工具实现url读配置文件
# 6. 使用db_tool工具,实现数据库连接信息从配置文件读取,登录用户数据从db读取
'''
思路:
    1.使用config_tool工具,动态获取config_dev.ini文件中的配置信息,url组成分别有协议+主机+端口
    2.使用db_tool工具,实现数据库连接信息从配置文件读取,登录用户数据从db读取
    3.获取数据库连接信息,建立连接,执行一条sql命令
    4.动态获取数据库中的username和pwd
    5.最后发送请求的url和json类型的data
'''


def test_login():
    # 实例化调用config_tool.ConfigTool()的工具类,赋值给conf变量
    conf = config_tool.ConfigTool()
    # 取值,取出协议名
    protocal = conf.get_conf('API_GY_DEV', 'protocal')
    # 取值,取出主机
    host = conf.get_conf('API_GY_DEV', 'host')
    # 取值,取出端口号
    port = conf.get_conf('API_GY_DEV', 'port')
    # 动态获取url 字符串拼接url
    url = protocal + '://' + host + ':' + port + '/login'
    print(url)
    # 动态调用数据库表里的数据
    # 实例化DB类,读取用户数据
    mydb = mydb_tool.DBTool()
    # 建立连接
    mydb.get_connect()
    # 执行一条sql
    row = mydb.query_one('SELECT * FROM `t_user_user`')
    print(row)
    # 取出row的字典中含有user_name的值
    user_name = row['user_name']
    print(user_name)
    # 取出row的字典中含有pwd的值
    pwd = row['pwd']
    print(pwd)
    # 动态获取数据库中的userName和pwd
    data = {
        "pwd": "%s" % (pwd),
        "userName": "%s" % (user_name)
    }
    print(data)
    # 往这个地址发送post的请求
    response = requests.post(url, json=data)
    print(response.text)
    # 获取的json转换成dict格式
    dict_token = dict(response.json())
    print(dict_token['data']['token'])
    # 获取响应数据中的token
    return dict_token['data']['token']






上一篇 下一篇

猜你喜欢

热点阅读