我正在使用Twisted并且有两个不同类型的回调(因此他们不共享工厂)。我试图从一个回调对象获取数据到另一个:
class CallbackA(object):
def transmit(self, data):
self.sendMessage(self, data)
class CallbackB(object):
def doRead(self): # this is called by Twisted
self.point_to_A.transmit(self.point_to_A, data)
class bigClass(object):
A = aClass
B = bClass
self.B.point_to_A = self.A
现在,我可以在@staticmethod
之前使用transmit
来实现此功能。然后我添加了方法(来自twisted)self.sendMessage
。我收到一个错误:“未定义全局名称自我”。好。所以我将对象作为第一个参数传递出来:
self.point_to_A.transmit(self.point_to_A, data)
然后我得到一个这样的错误:'unbound方法sendMessage()必须用'class A'实例作为第一个参数调用(改为获得classobj实例)
所以我似乎不明白如何将数据传递给子对象(在同一父对象下实例化的对象)之间的函数;在这种情况下扭曲回调。
如何从子对象'B'调用子对象'A'中的函数,并将数据传递给该函数,以便在'A'中该函数中可以使用'self'(根据Twisted方法的要求)被使用)?
编辑:更新以显示'自我'引用(如评论中所建议),我上面的代码得到的错误是:必须使用{{调用unbound方法sendMessage() 1}} instance作为第一个参数(改为使用classobj实例)
答案 0 :(得分:1)
我对下面的代码做了一些更改,基本上你需要记住:
self
关键字。data
值作为方法参数传递,或以某种方式分配(见下文)。以下是如何传递数据类到类的示例:
class CallbackA(object):
def transmit(self,data): # See note 1
do_stuff_with(data) # See note 1
class CallbackB(object):
def doRead(self,data): # see note 1
self.point_to_A.transmit(data) # see note 2
class bigClass(object):
def __init__(self):
self.A = CallbackA()
self.B = CallbackB()
self.B.point_to_A = self.A
上面的代码可能不会逐字逐句,但它是如何以您描述的方式将数据传递到另一个类的示例。你应该可以让你的工作从这个例子开始。
然后当它被召唤时:
test = bigClass()
test.B.doRead(data)
注1:您需要以某种方式声明data
。将它作为我已经显示的方法参数传递,或者您需要将其声明为属性:
class CallbackA(object):
def transmit(self,data):
do_stuff_with(self.data)
class CallbackB(object):
def __init__(self,data):
self.data = data
def doRead(self):
self.point_to_A.transmit(self.data)
或
class CallbackA(object):
def transmit(self,data):
do_stuff_with(self.data)
class ClassB(object):
def set_data(self,data):
self.data = data
def doRead(self):
self.point_to_A.transmit(self.data)
注2:您需要将方法调用为:method(class_instance, args)
或class_instance.method(args)
修改强>
作为我们在评论中讨论的附加内容。显式声明point_to_A
class ClassB(object):
def __init__(self,A):
self.point_to_A = A
def set_data(self,data):
self.data = data
def doRead(self):
self.point_to_A.transmit(self.data)