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

使用OOP开发树莓派模拟输入函数时遇self参数缺失错误

解决树莓派模拟输入读取类的TypeError问题

错误原因分析

出现TypeError: through_ads1015() missing 1 required positional argument: 'self'的核心问题有两个:

  • 类的构造方法__init__未定义self参数,这是Python类实例方法的必传参数,用于指代实例自身
  • 直接通过类名调用实例方法through_ads1015,未先创建类的实例对象

同时代码存在两处冗余/不合理设计:

  • 每次调用through_ads1015时重复创建ADS1015实例,没必要重复初始化硬件对象
  • r1 = r1、r2 = r2属于无效赋值,可直接删除

修正后的代码

import Adafruit_ADS1x15 as ada_adc


class RaspberryPiAnalogReader:
    # 类名遵循PEP8大驼峰命名规范
    def __init__(self):
        # 构造方法必须包含self参数
        # 初始化时创建一次ADS1015实例,复用硬件对象
        self.adc = ada_adc.ADS1015()

    def read_through_ads1015(self, adc_gain=1, r1=1, r2=0):
        # 读取A0引脚的原始模拟值
        a0_level = self.adc.read_adc(0, gain=adc_gain)
        print(a0_level)
        
        # 转换为ADS1015对应电压值
        a0_analog = a0_level * (4.096 / 2047)
        print(a0_analog)
        
        # 计算分压电路下的传感器实际输入电压
        a0_sensor = a0_analog * (r1 + r2) / r1
        print(a0_sensor)
        # 返回计算结果,方便后续业务逻辑使用
        return a0_sensor

正确调用方式

# 先创建类的实例对象
analog_reader = RaspberryPiAnalogReader()
# 通过实例调用方法
analog_reader.read_through_ads1015(adc_gain=1, r1=5.1, r2=3)

补充说明

  • Python类的所有实例方法,第一个参数必须是self,用于绑定实例与方法的关联
  • 硬件操作场景下,通过实例管理硬件对象是更合理的设计,能避免重复初始化硬件带来的资源浪费
  • 如果确实需要无需实例即可调用的方法,可使用@staticmethod或@classmethod装饰器,但不适合本场景的硬件操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 02:12:47