python引用方法赋值问题探究
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()时必须给它赋值
………………………………
………………………………
以上简单介绍了一下引用方法的括号内何时赋值何时不赋值的问题,工作中或许还会遇到更复杂的封装,大家可以相应的变通,原理是一样的。