Python Class 方法错误 -- 未绑定需要实例
Python Class Method Error -- unbound requires instance
我打电话给
Hardware.gpio_active(True)
这是我的硬件class:
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()
基本上充当函数但保留对静态 class 变量的可访问性。我认为这就是 @classmethod
的用途。 @staticmethod
.
我得到同样的错误
我误会了什么?
只需将 def gpio_active(active)
替换为 def gpio_active(cls, active)
。
在此处阅读有关 @classmethod
的更多信息:https://julien.danjou.info/blog/2013/guide-python-static-class-abstract-methods
您可以使用 staticmethod
:
@staticmethod
def gpio_active(active):
...
但看起来您应该使用 classmethod
,这样您就可以访问该 class 的其他 static/class 方法,或者访问 class 级别变量:
@classmethod
def gpio_active(cls, active):
...
然后将Hardware.gpio_pin
替换为cls.gpio_pin
我打电话给
Hardware.gpio_active(True)
这是我的硬件class:
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()
基本上充当函数但保留对静态 class 变量的可访问性。我认为这就是 @classmethod
的用途。 @staticmethod
.
我误会了什么?
只需将 def gpio_active(active)
替换为 def gpio_active(cls, active)
。
在此处阅读有关 @classmethod
的更多信息:https://julien.danjou.info/blog/2013/guide-python-static-class-abstract-methods
您可以使用 staticmethod
:
@staticmethod
def gpio_active(active):
...
但看起来您应该使用 classmethod
,这样您就可以访问该 class 的其他 static/class 方法,或者访问 class 级别变量:
@classmethod
def gpio_active(cls, active):
...
然后将Hardware.gpio_pin
替换为cls.gpio_pin