Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python类方法错误--未绑定需要实例_Python_Class_Static Methods - Fatal编程技术网

Python类方法错误--未绑定需要实例

Python类方法错误--未绑定需要实例,python,class,static-methods,Python,Class,Static Methods,我打电话来 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/' dev

我打电话来

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() 实例作为第一个参数(取而代之的是bool实例)

我不想传递实例——我希望
gpio\u active()
基本上充当函数,但保留对静态类变量的可访问性。我以为这就是
@classmethod
的目的。我用
@staticmethod
得到了相同的错误


我误解了什么?

只需将
def gpio_激活(激活)
替换为
def gpio_激活(cls,激活)


阅读有关
@classmethod
的更多信息,请点击此处:

只需将
def gpio_活动(活动)
替换为
def gpio_活动(cls,活动)


阅读有关
@classmethod
的更多信息,请点击此处:

您可以使用
静态方法

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

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

然后将
硬件.gpio\u引脚
替换为
cls.gpio\u引脚
您可以使用
静态方法

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

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

然后将
Hardware.gpio\u pin
替换为
cls.gpio\u pin

之前尝试过同样的问题。如果仍然出现
TypeError。。。改为使用bool实例
,我想您可能会忘记在运行代码之前保存代码。之前尝试过这个,同样的问题。如果您仍然得到
TypeError。。。取而代之的是bool实例
,我想您可能会忘记在运行代码之前保存代码。我需要访问其他类方法和变量。无论我用哪种方法尝试,我都会得到相同的错误:-/如果您执行上述操作,就不会得到该错误。你确定你的stacktrace在每种情况下都没有不同吗?我需要访问其他类方法和变量。无论我用哪种方法尝试,我都会得到相同的错误:-/如果您执行上述操作,就不会得到该错误。您确定stacktrace在每种情况下都没有不同吗?不,使用
staticmethod
时,您不应该得到相同的错误。这就是对它的描述,它不会隐式地将参数传递给函数。不,对于
staticmethod
,您不应该得到相同的错误。这就是它的描述,它不会隐式地将参数传递给函数。