import stackless
class MyTasklet(stackless.tasklet):
def __init__(self, func, msg):
pass
def foo():
pass
msg = 'hello'
MyTasklet(foo, msg)()我使用的是stackless python,这段代码会生成以下错误:
Traceback (most recent call last):
File "E:/workspace/python/test/klass.py", line 11, in <module>
MyTasklet(foo, msg)()
TypeError: tasklet() takes at most 1 argument (2 given)这很奇怪,因为我没有调用stackless.tasklet的构造函数。
任何人都知道这个错误是关于什么的。
发布于 2013-12-30 05:09:15
由于问题与子类stackless.tasklet有关,所以您可以将MyTasklet变成一个可调用的object,如下所示:
import stackless
class MyTasklet(object):
def __init__(self, func, msg):
self.func = func
self.msg = msg
def __call__(self):
t = stackless.tasklet()
t.bind(self.func)
t.setup(self.msg)
t.run()
def foo(msg):
print msg
msg = 'hello'
MyTasklet(foo, msg)()编辑:或者,您只需重写__new__,将正确的参数传递给stackless.tasklet.__new__
import stackless
class MyTasklet(stackless.tasklet):
def __new__(cls, func, msg):
return stackless.tasklet.__new__(MyTasklet, func)
def __init__(self, func, msg):
pass
def foo():
pass
msg = 'hello'
MyTasklet(foo, msg)()发布于 2013-12-31 20:43:34
不要子类stackless.tasklet。
这不是要如何使用无堆栈Python -更重要的是,与更简单的方法相比,它是困难和过于复杂的。您需要做的任何事情,都应该能够在f中完成,这是您在tasklet中运行的函数。如果您真的真的想要子类,那么搜索现有的代码示例,这将为您提供一个基本的工作任务子类。
如果您真的想在这方面得到帮助,那么没有一个拥有无堆栈Python经验的人能真正回答这里的问题。Stackless Python邮件列表就是它们所在的位置。
https://stackoverflow.com/questions/20833346
复制相似问题