我正在尝试创建一个名为ListenerVilma的类,它有两种方法:" Clock _"和"诊断_"。然而,两种方法都会调用内部函数。以下代码显示了我尝试实现上述行为,但是当我调用ListenerVilma.Clock_()时,得到以下错误:
TypeError:未绑定的方法必须使用ListenerVilma实例作为第一个参数调用Clock_()(没有取而代之)
如何创建我的类ListenerVilma ???
感谢。
.col-xs-4
答案 0 :(得分:0)
错误在ListenerVilma.Clock_()
中的第41行,这里您直接使用类的方法,因此没有隐式参数传递,并且需要一个ListenerVilma实例。解决方案是ListenerVilma().Clock_()
这首先创建一个类的实例,然后从实例调用它的Clock_方法。
除此之外,你的类构造非常奇怪,__init__
用于初始化class,基本类构造就是这样
class Foo:
"""example class"""
def __init__(self,*argv,**karg):
"""initialize this class"""
#do something with argv and/or karg according to the needs
#for example this
print "init argv", argv
print "init karg", karg
self.ultimate=42
def do_stuff(self):
"""this method do something"""
print "I am doing some stuff"
print "after 7.5 million years of calculations The Answer to the Ultimate Question of Life, the Universe, and Everything is: ", self.ultimate
def do_some_other_stuff(self,*argv,**karv):
"""this method do something else"""
print "method argv", argv
print "method karg", karg
# basic usage
test = Foo(1,2,3,key_test=23)
test.do_stuff()
test.do_some_other_stuff(7,8,9,something=32)
test.ultimate = 420
test.do_stuff()
我不太确定你的意图是什么,但你建立Clock_
和Diagnostics_
作为一个班级,但他们不是,而现在他们什么都不做,如果你想要他们上课自己做什么
class Clock_:
def __init__(self):
self.listener()
def callback(self, clock):
print clock
def listener(self):
rospy.Subscriber('clock', Clock, self.callback)
与Diagnostics_
相同,我没有看到listener
方法的原因,所以我会把它在__init__
中做的,但也许是rospy需要它?我不知道,但对于它的外观,它应该用作
rospy.init_node('listener', anonymous=True)
Clock_()
Diagnostics_()
rospy.spin()
答案 1 :(得分:-1)
Clock_
方法不属于该类;它是一个'实例'方法。
有两个选项
listener = ListenerVilma()
或ListenerVilma
类中:使用@classmethod
注释方法,并使该类继承自object:class ListenerVilma(object):
。但请记住,您的方法中的第一个参数将是对类的引用,而不是对实例的引用。答案 2 :(得分:-1)
以下代码可以更好地执行我想要的行为。 :)
class ListenerVilma:
def CLOCK(self):
def clock_sub():
rospy.Subscriber('clock', Clock, clock_callback)
def clock_callback(clock):
print clock
clock_sub()
def DIAGNOSTICS(self):
def diagnostics_sub():
rospy.Subscriber('diagnostics', DiagnosticArray, diagnostics_callback)
def diagnostics_callback(diagnostics):
print diagnostics
diagnostics_sub()
if __name__ == '__main__':
rospy.init_node('listener', anonymous=True)
myVilma = ListenerVilma()
myVilma.CLOCK()
myVilma.DIAGNOSTICS()
rospy.spin()