Python类方法错误unbound需要instan

2024-04-23 21:36:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我打电话来

Hardware.gpio_active(True)

这是我的硬件课程:

import os
import glob
import time
import RPi.GPIO as GPIO

#class to manage hardware -- sensors, pumps, etc
class Hardware(object):
    #global vars for sensor 
    base_dir = '/sys/bus/w1/devices/'
    device_folder = glob.glob(base_dir + '28*')[0]
    device_file = device_folder + '/w1_slave'

    #global var for program
    temp_unit = 'F' #temperature unit, choose C for Celcius or F for F for Farenheit
    gpio_pin = 17 

    #function to enable GPIO
    @classmethod
    def gpio_active(active):
        #system params for sensor
        if active is True:
            os.system('modprobe w1-gpio')
            os.system('modprobe w1-therm')
            GPIO.setmode(GPIO.BCM)
            GPIO.setup(Hardware.gpio_pin, GPIO.OUT)
            print 'activating GPIO'
        else:
            print 'deactivating GPIO'
            GPIO.cleanup() 

我得到这个错误:

TypeError: unbound method gpio_active() must be called with Hardware instance as first argument (got bool instance instead)

我不想传递实例--我希望gpio_active()基本上充当函数,但保留对静态类变量的可访问性。我以为这就是@classmethod的目的。我得到了与@staticmethod相同的错误。你知道吗

我误解了什么?你知道吗


Tags: toimporttrueforgpioosdeviceas
2条回答

您可以使用staticmethod

@staticmethod
def gpio_active(active):
    ... 

但是看起来您应该使用classmethod,这样您就可以访问该类的其他静态/类方法,或者访问类级变量:

@classmethod
def gpio_active(cls, active):
    ... 

然后用cls.gpio_pin替换Hardware.gpio_pin

只需将def gpio_active(active)替换为def gpio_active(cls, active)。你知道吗

更多关于@classmethod的信息,请点击这里:https://julien.danjou.info/blog/2013/guide-python-static-class-abstract-methods

相关问题 更多 >