在Python中将数据传递给另一个类
我使用的是Twisted,有两个回调,都是不同的类型(所以它们不共享工厂)。我正在尝试从一个回调对象到另一个回调对象获取数据:在Python中将数据传递给另一个类,python,oop,Python,Oop,我使用的是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.transm
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
来实现这一点。然后我添加了方法(来自twisted)self.sendMessage
。我收到一个错误:“未定义全局名称self”。好啊因此,我将对象作为第一个参数传递,如下所示:
self.point_to_A.transmit(self.point_to_A, data)
然后我得到一个类似这样的错误:“必须使用'class A'实例作为第一个参数调用unbound method sendMessage()(改为使用classobj实例)
因此,我似乎不明白如何在子对象(在同一父对象下实例化的对象)之间向函数传递数据;在这种情况下是扭曲回调
如何从子对象“B”调用子对象“a”中的函数,并将数据传递给该函数,从而使“a”中的函数中的“self”可用(根据所使用的扭曲方法的要求)
编辑:更新以显示“self”引用(如注释中所建议的),我在上面的代码中得到的错误是:必须使用
aClass
实例作为第一个参数调用unbound方法sendMessage()(改为使用classobj实例)我对下面的代码做了一些更改,基本上你需要记住:
self
关键字数据
值作为方法参数传递,或者以某种方式分配它(见下文)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:您需要以某种方式声明数据。如我所示,将其作为方法参数传递,或者需要将其声明为属性:
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)
或
注意2:您需要调用方法为:method(class\u实例,args)
或class\u实例。method(args)
编辑
作为我们在评论中讨论的补充。明确声明点到点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)
将self
添加到类参数中。我认为这与指示代码中某个地方正在调用A.call(…)
之类的内容的错误无关,它抱怨没有名为call
的方法。如果你想给我更多的信息,我可以试着帮助你。当你调用一个类实例方法作为self.point\u to\u a.transmit(self.data)
时,它将self.point\u to\u a
作为第一个参数,将self.data
作为第二个参数,这符合方法声明def transmit(self,data)
。您能否提供有关收到的错误的更多信息?添加一些print语句以查看代码失败的确切位置,或者使用@horsehear命令,这也很有用。上下文如何?是哪条线出的错?@马毛:当然!
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)