我正在打电话
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:必须使用硬件调用未绑定方法gpio_active() instance作为第一个参数(取而代之的是bool实例)
我不想传递一个实例 - 我希望gpio_active()
基本上充当一个函数,但保留对静态类变量的可访问性。我认为这是@classmethod
的用途。我在@staticmethod
时遇到了同样的错误。
我误解了什么?
答案 0 :(得分:1)
只需将def gpio_active(active)
替换为def gpio_active(cls, active)
。
在此处详细了解@classmethod
:https://julien.danjou.info/blog/2013/guide-python-static-class-abstract-methods
答案 1 :(得分:1)
您可以使用staticmethod
:
@staticmethod
def gpio_active(active):
...
但看起来你应该使用classmethod
,这样你就可以访问该类的其他静态/类方法,或者访问类级变量:
@classmethod
def gpio_active(cls, active):
...
然后将Hardware.gpio_pin
替换为cls.gpio_pin