[英]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.