首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无堆栈python构造函数

无堆栈python构造函数
EN

Stack Overflow用户
提问于 2013-12-30 04:28:16
回答 2查看 115关注 0票数 0
代码语言:javascript
复制
import stackless
class MyTasklet(stackless.tasklet):
    def __init__(self, func, msg):
        pass

def foo():
    pass

msg = 'hello'
MyTasklet(foo, msg)()

我使用的是stackless python,这段代码会生成以下错误:

代码语言:javascript
复制
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的构造函数。

任何人都知道这个错误是关于什么的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-30 05:09:15

由于问题与子类stackless.tasklet有关,所以您可以将MyTasklet变成一个可调用的object,如下所示:

代码语言:javascript
复制
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__

代码语言:javascript
复制
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)()
票数 0
EN

Stack Overflow用户

发布于 2013-12-31 20:43:34

不要子类stackless.tasklet

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

如果您真的想在这方面得到帮助,那么没有一个拥有无堆栈Python经验的人能真正回答这里的问题。Stackless Python邮件列表就是它们所在的位置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20833346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档