簡體   English   中英

無堆棧python構造函數

[英]stackless python constructor

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的構造函數,所以這很奇怪。

任何人都知道錯誤的確切含義。

由於問題與子類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子類化。

這並不是使用Stackless Python的本意-更重要的是,與簡單的方法相比,它既困難又過於復雜。 您需要做的所有事情,都應該可以在Tasklet中運行的函數f執行。 如果您確實真的想繼承子類,請搜索現有的代碼示例,這將為您提供基本的工作tasklet子類。

如果您真的需要幫助,那么沒有Stackless Python經驗的人真的可以在這里回答問題。 Stackless Python郵件列表就是它們所在的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM