python脚本编写中,经常会遇到引用一个模块的方法的场景。引用的方法里到底赋不赋值曾经困扰了我好久。

最近利用python写了一个接口自动化测试脚本,在查阅观看多篇博文和视频后解决了封装方法引用的问题。自认为相对熟悉了封装方法引用这一块知识点,以下将具体阐述

以封装post请求的url方法为例

1、未封装前的代码如下:

#!/usr/bin/python

# -*- coding: UTF-8 -*-

import requests

import unittest

class Demo(unittest.TestCase):

def setUp(self):

domain = 'http://192.168.1.1'

endpoint = '/bo/ke/yuan/sousuo'

self.url = ''.join([domain,endpoint])       #该值为样例,无任何实际意义

def test_Demo1(self):

try:

result = requests.post(self.url,data=data)

self.assertEqual(result.text,200)

print ("Demo1测试通过")

except Exception as e:

print ('Demo1测试不通过’, e)

def tearDown(self):

pass

if __name__ == '__main__':

unittest.run()

2、对Demo类的domain值进行封装,创建Public包,在Public包下创建config类,代码如下:

#!/usr/bin/python

# -*- coding: UTF-8 -*-

def get_domain():

domain = 'http://192.168.1.1'

return domain

3、Demo类引用Public包下的config类,代码如下:

#!/usr/bin/python

# -*- coding: UTF-8 -*-

import requests

import unittest

from Public import config   #引入Public模块

class Demo(unittest.TestCase):

def setUp(self):

domain = config.get_domain()  #因为在Public包的config类里get_domain()没有在小括号里赋值,所以此处引用不需要赋值

endpoint = '/bo/ke/yuan/sousuo'

self.url = ''.join([domain,endpoint])       #该值为样例,无任何实际意义

………………………………

………………………………

4、为了安全和维护方便,可以继续对Demo类的self.url进行封装,在Public包创建base类,代码如下

#!/usr/bin/python

# -*- coding: UTF-8 -*-

from Public import config

class url():

def get_url(Endpoint):

domain = config..get_domain()

endpoint = Endpoint

url = ''.join([domain,endpoint])

return url

5、Demo类调用Public包的base类,代码如下:

#!/usr/bin/python

# -*- coding: UTF-8 -*-

import requests

import unittest

from Public import base # 引用base类

#from Public import config   因为base类引用了config类,此处的config可以删掉

class Demo(unittest.TestCase):

def setUp(self):

endpoint = '/bo/ke/yuan/sousuo'

self.url = base.get_url(endpoint)      #因为在base类中给get_url()中的()中赋值,因此引用get_url()时必须给它赋值

………………………………

………………………………

以上简单介绍了一下引用方法的括号内何时赋值何时不赋值的问题,工作中或许还会遇到更复杂的封装,大家可以相应的变通,原理是一样的。

python引用方法赋值问题探究的更多相关文章

  1. Python引用拷贝赋值

    先安利一个网站,对学习编程很有帮助:http://www.pythontutor.com/ 可以逐行可视化执行代码,具体自行体验啦 这个网站也是我在看别人的博文时候找到的,也先贴上别人的理解吧,我觉得 ...

  2. python 深入理解 赋值、引用、拷贝、作用域

    在 python 中赋值语句总是建立对象的引用值,而不是复制对象.因此,python 变量更像是指针,而不是数据存储区域, 这点和大多数 OO 语言类似吧,比如 C++.java 等 ~ 1.先来看个 ...

  3. Python 魔术方法指南

    入门 构造和初始化 构造定制类 用于比较的魔术方法 用于数值处理的魔术方法 表现你的类 控制属性访问 创建定制序列 反射 可以调用的对象 会话管理器 创建描述器对象 持久化对象 总结 附录 介绍 此教 ...

  4. python引用和对象详解

    python引用和对象详解 @[马克飞象] python中变量名和对象是分离的 例子 1: a = 1 这是一个简单的赋值语句,整数 1 为一个对象,a 是一个引用,利用赋值语句,引用a指向了对象1. ...

  5. Python引用复制,参数传递,弱引用与垃圾回收

    引用 先上个示例: >>> val = [1] >>> val[0] = val >>> val [[...]] 上述代码使val中包含自身,而产 ...

  6. 【转】Python中的赋值、浅拷贝、深拷贝介绍

    这篇文章主要介绍了Python中的赋值.浅拷贝.深拷贝介绍,Python中也分为简单赋值.浅拷贝.深拷贝这几种"拷贝"方式,需要的朋友可以参考下   和很多语言一样,Python中 ...

  7. Python引用模块和查找模块路径

    模块间相互独立相互引用是任何一种编程语言的基础能力.对于"模块"这个词在各种编程语言中或许是不同的,但我们可以简单认为一个程序文件是一个模块,文件里包含了类或者方法的定义.对于编译 ...

  8. Python魔法方法总结及注意事项

    1.何为魔法方法: Python中,一定要区分开函数和方法的含义: 1.函数:类外部定义的,跟类没有直接关系的:形式: def func(*argv): 2.方法:class内部定义的函数(对象的方法 ...

  9. python中的赋值操作和复制操作

    之前一直写C#,变量之间赋值相当于拷贝,修改拷贝变量不会改变原来的值.但是在python中发现赋值操作本质是和C++中的引用类似,即指向同一块内存空间.下面通过一个例子说明: p=[0,1,2,3,4 ...

随机推荐

  1. 关于数学公式Markdown

    打开写博客(这都打不开就...) 再打开"选项". 选"启用数学公式支持"对(以后有用嘻嘻) 在默认编辑器里有Markdown选对. 然后就可以 \[\sum\ ...

  2. tf.split函数的用法(tensorflow1.13.0)

    tf.split(input, num_split, dimension): dimension指输入张量的哪一个维度,如果是0就表示对第0维度进行切割:num_split就是切割的数量,如果是2就表 ...

  3. pwnable.kr-cmd2-witeup

    程序清除了环境变量,解决对策是使用绝对地址使用各种命令和文件. 程序的过滤策略更加严格,过滤了/.天哪,使用绝对路径必用/,怎么办咩? 解决办法是使用pwd变量,它会显示当前目录,然而在/目录下执行此 ...

  4. subDomainsBrute安装(windows系统)

    step1:  安装python2.7(省略) step2:  下载subDomainsBrute 地址: https://github.com/lijiejie/subDomainsBrute 下载 ...

  5. git的详细使用,项目创建到同步远程仓库,版本回退,忽略文件,分支创建,分支合并,分支名称修改,冲突解决,项目迁移

    注意:此处省略git的安装 1..git的工作流程示意图: 2.本地仓库的初始化: 2.1 创建一个文件夹,如我创建的是:D:\gitdemo\shop 2.2 进入shop目录,鼠标右键,打开git ...

  6. Appium的一些问题的总结答案

        问题 1. error: Failed to start an Appium session, err was: Error: Requested a new session but one ...

  7. Android Handler MessageQueue Looper 消息机制原理

    提到Android里的消息机制,便会提到Message.Handler.Looper.MessageQueue这四个类,我先简单介绍以下这4个类 之间的爱恨情仇. Message 消息的封装类,里边存 ...

  8. 在Centos6上安装RabbitMQ的过程(有点坑)

    1.安装依赖环境 yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ ...

  9. Office远程代码执行漏洞(CVE-2017-11882)

    POC: https://github.com/Ridter/CVE-2017-11882/ 一.简单的生成弹计算器的doc文件. 网上看到的改进过的POC,我们直接拿来用,命令如下: #python ...

  10. SQL数据库删除和还原的时候提示 被占用 记录一下

    设置离线 1)ALTER DATABASE [datebase] SET OFFLINE WITH ROLLBACK IMMEDIATE设置在线 2)ALTER DATABASE [datebase] ...