Python requests代码重构为OOP类后调用返回函数对象如何解决
问题修正与知识点讲解
错误原因
- 你定义的
response是类的实例方法,必须先实例化getvps类生成对象,才能调用该方法 - 调用方法时必须加括号
(),不加括号获取到的是方法本身的内存引用,不是方法执行后的返回值 - 你的重构代码遗漏了
requests库的导入语句,运行时会触发模块不存在报错
修正后可运行的完整代码
import requests # 类名遵循Python大驼峰命名规范,也可保留你原有写法 class GetVps: # 类属性:所有实例共享的请求配置 url = 'https://example.com/getlistitem' headers = { 'User-Agent': 'Mozilla/5.0', 'Referer': 'http://banggia.tvs.vn/', 'Content-Type': 'application/json;charset=utf-8' } def get_response(self): # 实例方法,self参数固定指向当前类的实例对象 try: res = requests.get(self.url, headers=self.headers, timeout=30) res.raise_for_status() # 捕获4xx/5xx类的请求错误 return res.json() except Exception as e: print(f"请求执行出错:{str(e)}") return None if __name__ == '__main__': # 1. 实例化类,生成具体的请求客户端对象 vps_client = GetVps() # 2. 调用实例方法,加()执行方法内部逻辑 api_result = vps_client.get_response() print(api_result)
相关核心知识点
- 类与实例的区别:类是抽象的功能模板,实例是根据模板生成的可调用的具体对象,带
self参数的实例方法只能通过实例调用,不能直接用类名调用 - 方法调用规则:Python中所有函数、方法调用都需要加括号
(),不加括号返回的是函数/方法本身的对象引用,不会执行内部的逻辑代码 - 编码规范优化:Python官方推荐类名使用大驼峰写法(每个单词首字母大写,无连接符),例如
getvps改为GetVps,可以提升代码可读性;你原有headers里的content-type: text/json属于冗余配置,会被后面的Content-Type覆盖,可直接删除 - 请求健壮性优化:新增
raise_for_status()和异常捕获逻辑,遇到网络错误、接口返回4xx/5xx状态码时会主动打印错误原因,方便排查问题
内容的提问来源于stack exchange,提问作者Huynh
相关产品推荐
相关产品推荐

