Python调用dynamic类方法缺self参数报错及requests相关使用问题求助
报错根因
- 类中定义的第一个参数为
self的方法都是实例方法,只能通过类的实例对象调用,self会由Python自动传入,无需手动传参 - 你在
lib/core.py的全局作用域直接通过类名dynamic调用实例方法dynamic_analyze(),没有传入实例对象,因此触发缺少self参数的报错 - 此外
lib/core.py中的全局逻辑在你import的时候就会自动执行,这也是为什么报错发生在import语句执行阶段 - 你看到IDE推荐的
self=传参形式是IDE识别到参数缺失给出的临时兼容方案,不符合Python类的标准写法,不需要手动传入self,正确做法是先实例化类再调用方法
完整修复方案
1. 修复lib/core.py代码
修正后的代码如下:
import itertools import sys import time import threading class dynamic: def __init__(self): # 初始化所有开关为False self.loadSwitch = False self.analyzeSwitch = False self.exitSwitch = False self.done = False def dynamic_load(self): self.loadSwitch = True # 原有加载动画逻辑 for c in itertools.cycle(['[ | ]', '[ / ]', '[ - ]', '[ \\ ]']): if self.done: break sys.stdout.write('\rLoading ' + c) sys.stdout.flush() time.sleep(0.1) # 执行完成重置所有开关 self._reset_all_switches() def dynamic_analyze(self): self.analyzeSwitch = True # 这里补充你的分析逻辑 # ... 原有功能代码 # 执行完成重置所有开关 self._reset_all_switches() def dynamic_exit(self): self.exitSwitch = True # 这里补充你的退出逻辑 # ... 原有功能代码 # 执行完成重置所有开关 self._reset_all_switches() # 私有方法:统一重置所有开关为初始状态 def _reset_all_switches(self): self.loadSwitch = False self.analyzeSwitch = False self.exitSwitch = False self.done = True # 全局执行逻辑放到main块中,仅在import时不会自动执行 if __name__ == "__main__": # 先实例化dynamic类 d = dynamic() # 根据开关判断执行对应逻辑 if d.analyzeSwitch: # target仅传方法名,不要加括号,避免直接执行方法 t = threading.Thread(target=d.dynamic_analyze) t.start() elif d.exitSwitch: t2 = threading.Thread(target=d.dynamic_exit) t2.start() else: t3 = threading.Thread(target=d.dynamic_load) t3.start() t3.join() # 等待线程执行完成 sys.stdout.write('\r[ ✓ ] Process Complete ') time.sleep(4.5)
2. 修复调用侧代码
修正后的调用逻辑如下:
from lib.core import dynamic import requests import time # 其他引入代码 if requests.get(url).status_code != 200: clear() print(" xxxxx \n\n\n") print("[ !! | Invalid URL ] Status code: {0}".format(str(requests.get(url).status_code))) time.sleep(1) print("\n\n Please enter a valid URL.\nExiting...") # 先实例化类对象 d = dynamic() # 直接调用实例方法即可,不需要手动传self d.dynamic_exit() time.sleep(3) exit()
内容的提问来源于stack exchange,提问作者echo
相关产品推荐
相关产品推荐

