我有一類方法:蟒類方法抱怨的時候叫
class MyServerProtocol(WebSocketServerProtocol):
@classmethod
def send(cls, text):
cls.sendMessage(cls, text)
def onMessage(self, payload, isBinary):
msp=MyServerProtocol
msp.send('test')
我想調用這個類方法(如測試現在,從類中)和我得到:
exceptions.TypeError: unbound method sendMessage() must be called with MyServerProtocol instance as first argument (got type instance instead)
它期待一個實例並抱怨它有一個實例...任何人都知道如何正確地調用它。一旦我得到它的工作,我可以從另一個課程中進行測試,只是想在遷移之前先讓它工作。
編輯:
我已經修改我的代碼調用的方法如下,但它仍然是現在的工作。從高速公路
class MyServerProtocol(WebSocketServerProtocol):
def onMessage(self, payload, isBinary):
myInput = literal_eval(payload)
cg = coreg.DataGatherCg()
cg.test(myInput, self)
def send(self, text):
self.sendMessage(text)
class DataGatherCg():
def test(self, myInput, obj):
obj.send(myInput)
SendMessage函數如下所示,通過自後我得到一個AssertionError:
def sendMessage(self,
payload,
isBinary=False,
fragmentSize=None,
sync=False,
doNotCompress=False):
"""
Implements :func:`autobahn.websocket.interfaces.IWebSocketChannel.sendMessage`
"""
assert(type(payload) == bytes)
if self.state != WebSocketProtocol.STATE_OPEN:
return
if self.trackedTimings:
self.trackedTimings.track("sendMessage")
# (initial) frame opcode
#
if isBinary:
opcode = 2
else:
opcode = 1
self.trafficStats.outgoingWebSocketMessages += 1
# setup compressor
#
if self._perMessageCompress is not None and not doNotCompress:
sendCompressed = True
self._perMessageCompress.startCompressMessage()
self.trafficStats.outgoingOctetsAppLevel += len(payload)
payload1 = self._perMessageCompress.compressMessageData(payload)
payload2 = self._perMessageCompress.endCompressMessage()
payload = b''.join([payload1, payload2])
self.trafficStats.outgoingOctetsWebSocketLevel += len(payload)
else:
sendCompressed = False
l = len(payload)
self.trafficStats.outgoingOctetsAppLevel += l
self.trafficStats.outgoingOctetsWebSocketLevel += l
# explicit fragmentSize arguments overrides autoFragmentSize setting
#
if fragmentSize is not None:
pfs = fragmentSize
else:
if self.autoFragmentSize > 0:
pfs = self.autoFragmentSize
else:
pfs = None
# send unfragmented
#
if pfs is None or len(payload) <= pfs:
self.sendFrame(opcode=opcode, payload=payload, sync=sync, rsv=4 if sendCompressed else 0)
# send data message in fragments
#
else:
if pfs < 1:
raise Exception("payload fragment size must be at least 1 (was %d)" % pfs)
n = len(payload)
i = 0
done = False
first = True
while not done:
j = i + pfs
if j > n:
done = True
j = n
if first:
self.sendFrame(opcode=opcode, payload=payload[i:j], fin=done, sync=sync, rsv=4 if sendCompressed else 0)
first = False
else:
self.sendFrame(opcode=0, payload=payload[i:j], fin=done, sync=sync)
i += pfs
# if self.debug:
# self.log.debug("Traffic statistics:\n" + str(self.trafficStats))
您需要顯示'sendMessage'的定義,因爲這是引發錯誤的方法。 – BrenBarn