You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python类方法设置默认参数调用时报无fps属性错误如何解决

问题产生原因

方法定义中def screen(self,fps=12.0,time=10)里的fps和time是screen方法的局部形参,不属于实例属性。你在方法内部通过self.fps、self.time调用时,Python会去VidRec类的实例属性列表中查找对应值,但你从未将传入的参数绑定到实例上,因此触发「实例不存在fps属性」的报错。

修复方案

你的代码中fps和time仅在screen方法内部使用,不需要绑定为实例属性,直接调用形参即可,同时可以顺手修正原代码中颜色通道转换顺序写反的问题(否则输出视频会出现颜色异常):

  • 将方法内所有self.fps替换为形参fps,self.time替换为形参time
  • 将颜色转换逻辑从cv2.COLOR_BGR2RGB改为cv2.COLOR_RGB2BGR:pyautogui截图输出的是RGB顺序图像,OpenCV的VideoWriter写入需要BGR顺序输入

修复后的完整类代码如下:

import pyautogui
import cv2
import numpy as np
class VidRec:
    def screen(self,fps=12.0,time=10):
        SCREEN_SIZE = tuple(pyautogui.size())
        fourcc = cv2.VideoWriter_fourcc(*"XVID")
        out = cv2.VideoWriter("output.avi", fourcc, fps, SCREEN_SIZE)
        for i in range(int(time * fps)):
            img = pyautogui.screenshot()
            # 转换为OpenCV可处理的numpy数组
            frame = np.array(img)
            # 修正颜色空间转换顺序,适配OpenCV写入要求
            frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
            out.write(frame)
            # 按q键可提前终止录制
            if cv2.waitKey(1) == ord("q"):
                break

        cv2.destroyAllWindows()
        out.release()

原有调用逻辑不需要修改,直接无参调用p.screen()就会按照默认的12帧率、录制10秒的参数运行。

如果你后续需要在VidRec类的其他方法中访问fps、time参数,可以在screen方法开头增加两行代码,将形参绑定为实例属性:

self.fps = fps
self.time = time

绑定后再使用self.fps、self.time就不会触发属性不存在的报错。

内容的提问来源于stack exchange,提问作者tavgar elahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 17:24:21