Python 内置函数getattr()
优点
- 可消除if...else
Python 面向对象中的反射
- 通过字符串的形式操作对象的属性,true or false
- Python 中一切皆为对象,所以只要是对象都可以使用反射
- 比如:实例对象、类对象、本模块、其他模块,因为他们都能通过 对a.属性 的方式获取、调用
hasattr
def hasattr(*args, **kwargs):
pass
- 返回对象是否具有具有给定名称的属性
getattr
def getattr(object, name, default=None):
pass
- 获取对象指定名称的属性
- 当属性不存在,则返回 default 值,如果没有指定 default 就会抛出异常
未使用反射前
class BaseRequest:
req = requests.Session()
def get(self, url):
resp = self.req.get(url)
print("==get==")
return resp
def post(self, url):
resp = self.req.post(url)
print("==post==")
return resp
def put(self, url):
resp = self.req.put(url)
print("==put==")
return resp
# 不使用反射的方法
def main(self, method, url):
if method == "get":
self.get(url)
elif method == "post":
self.post(url)
elif method == "put":
self.put(url)
使用反射后
# 使用反射的方法
def main_attr(self, method, url):
if hasattr(self, method):
func = getattr(self, method)
func(url)
实际运用
# 原始
def get(self, url, **kwargs):
'''
定义get方法
'''
response = requests.get(self.host + url, **kwargs, timeout=self.timeout, verify=False)
return response
def post(self, url, **kwargs):
'''
定义post方法
'''
response = requests.post(self.host + url, **kwargs, timeout=self.timeout, verify=False)
return response
# 优化
def main_http(self, method, url, **kwargs):
# 判断对象是否有对应的方法
if hasattr(self, method):
# 获取对应的方法
func = getattr(self, method)
# 执行方法,且获取返回值
res = func(url, **kwargs)
return res
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)