需求
封装了一个请求方法:
utils.py 部分代码
import requests
# 禁用安全请求警告
requests.packages.urllib3.disable_warnings()
port = 14591
headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.53"
}
def get(route, **kwargs):
return requests.get(f'https://127.0.0.1:{port}/{route}', headers=headers, **kwargs)
def post(route, **kwargs): ...
user.py调用get
from utils import *
querystring = {"name": "Sugar"}
get('api/v1/usr', params=querystring, verify=False)
这里面有一个问题,就是参数url是固定的,端口port不固定(我不想重新在调用这个函数的user.py文件里里面传入port这个参数,在调用该函数的文件最顶处声明就可以了),我想通过在user.py里面更改port的值,从而修改get方法里面传入的port值
开始我是在user.py里面定义了一个 port=14592,
# utils.py
def get(route, **kwargs):
print('modify', port)
# user.py
port = 14591
print(port)
get('', )
# 运行 user.py 输出
"""
14591
modify 14592
"""
也就是说没有成功修改,访问的还是默认的端口,而不是修改后新的端口,
而且通过这两个port的id发现他们也是不一样的地址
解决
经过尝试,想到了类可以作为python动态语言里面的关键词 类 class (理解为) 命名空间来实现所谓的静态变量 static 这里操作符由于python没有花括号{}, 只能冒号:
感觉有点类似于C/C++里面的 extern int x;
用之前先声明一下,至于什么时候用,在哪里用,什么时候再用, 再考虑给他赋值,
并且给个报错即可
# utils.py 定义 get 方法
class params: pass
params.port = 14592
def get(route, **kwargs):
print('modify', params.port)
#
# user.py调用
from utils import *
params.port = 14591
print(params.port)
get('')
打印结果
14591
modify 14591
即使utils.py里面不定义 params.port = 14592 也是可以用的
# utils.py 定义 get 方法
class params: pass # 定义一个命名空间(作用域),里面什么也没有 ... or pass
# params.port = 14592 # 定义并赋值
# params.port = ... # 定义不给值, python定义变量不能只有个变量,所以等号右边(右值)必须要有东西
# 不定义,一样是可以用的,目的就是要被其他py文件调用的,如果怕IDE提示未定义属性问题,加上也可以
def get(route, **kwargs):
print('modify', params.port)
#
class params: ...
params.port = ...
def get(route, **kwargs):
params.port = 145913214
print('modify', params.port)
print(params.port)
params.port = 14591
print(params.port)
get('')
print(params.port)
打印结果:
Ellipsis
14591
modify 145913214
145913214
个人感觉比global好用,项目里面全局变量多的情况下,名字也不好起
如果有修改需求的话,对比 yaml?
衍生出:
class params:
class web:
class database: ...
class client:
ui: ...
class embedded: ...
版权声明:本文为qq_34580627原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。