1

我正在尝试收集通过套接字解析的数据。这是我的代码:

import pickle
import SocketServer

class SocketReciever(SocketServer.BaseRequestHandler):

    def handle(self):
        sint = self.request.makefile('rb')
        objectt = pickle.load(sint)
        #print(objectt)
        ParentClassCall(objectt)

if __name__ == "__main__":
    HOST, PORT = "localhost", 60

    # Create the server, binding to localhost on port 9999
    server = SocketServer.TCPServer((HOST, PORT), SocketReciever)
    # Activate the server; this will keep running until you
    # interrupt the program with Ctrl-C
    server.serve_forever()

data=[]
def ParentClassCall(currentdata):
    data.append(currentdata)

我的问题是如何从 SocketReciever 类中调用 ParentClassCall 函数?

我知道这种方法存在安全问题,但它会在没有互联网接入的计算机上运行。

4

2 回答 2

2

这是您示例的简化版本,用于演示问题:

class Foo(object):

  def __init__(self):
    pass

  def do_something(self):
    not_yet_defined_function()

if __name__ == "__main__":
  foo = Foo()
  foo.do_something()

def not_yet_defined_function():
  print "It worked!"

结果是一样的:

Traceback (most recent call last):
  File "tmp.py", line 11, in <module>
    foo.do_something()
  File "tmp.py", line 7, in do_something
    not_yet_defined_function()

问题是您试图在定义之前访问该函数。python 解释器按顺序读取文件,按顺序执行命令。classanddef关键字只是创建(类和函数)对象的命令。因此,您需要确保在开始使用它们之前定义所有对象。

通过更改示例以首先定义函数:

class Foo(object):

  def __init__(self):
    pass

  def do_something(self):
    not_yet_defined_function()

def not_yet_defined_function():
  print "It worked!"

if __name__ == "__main__":
  foo = Foo()
  foo.do_something()

然后你得到你想要的结果:

lap:~$ python tmp2.py
It worked!
于 2013-02-07T18:35:45.853 回答
2

Python 永远不会定义ParentClassCall(),因为它停在 line 处server.serve_forever()。在主节之前定义函数。

于 2013-02-07T18:29:55.037 回答