[英]Passing data to another class in Python
我正在使用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
现在,我可以通过在transmit
之前使用@staticmethod
使其工作。 然后我添加了方法(来自扭曲) self.sendMessage
。 我收到一个错误:“未定义全局名称self”。 好。 因此,我将对象作为第一个参数传递,如下所示:
self.point_to_A.transmit(self.point_to_A, data)
然后我得到这样的错误:'必须以'class A'实例作为第一个参数来调用'unbound方法sendMessage()(取而代之的是class classobj实例)
因此,似乎我不明白如何将数据传递给子对象(在同一父对象下实例化的对象)之间的函数。 在这种情况下扭曲的回调。
如何从子对象“ B”中调用子对象“ A”中的函数,并将数据传递给该函数,以使该函数中的“ self”在“ A”中可用(如所使用的Twisted方法所要求) ?
编辑:更新以显示“自我”引用(如注释中所建议),我在上面的代码中遇到的错误是:必须以aClass
实例作为第一个参数来调用未绑定方法sendMessage()(改为使用classobj实例)
我对以下代码进行了一些更改,基本上您需要记住:
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.