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()时必须给它赋值

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

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

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