无堆栈结构

2024-03-29 07:25:07 发布

您现在位置:Python中文网/ 问答频道 /正文

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的构造函数。你知道吗

任何人都知道错误到底是怎么回事。你知道吗


Tags: importselfmosthellofooinitdef错误
2条回答

由于问题与子类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)()

不要将stackless.tasklet子类化。你知道吗

这不是使用无堆栈Python的方法,更重要的是,与简单的方法相比,它既困难又过于复杂。任何您需要做的事情,您都应该能够在f,即您在tasklet中运行的函数中完成。如果您真的想创建子类,那么搜索现有的代码示例,它已经为您提供了一个基本的工作tasklet子类。你知道吗

如果你真的想得到帮助,没有一个拥有stacklesspython经验的人会在这里回答问题。无堆栈Python邮件列表就是它们所在的位置。你知道吗

相关问题 更多 >