がasyncioループと非同期コルーチンを含むクラスの次の例を考えてみましょう:パイソン、asyncio:ループ構文を簡素化するクラスのデコレータ
import asyncio
class Async:
def __init__(self):
self.loop=asyncio.get_event_loop()
async def function(self, word):
print(word)
await asyncio.sleep(1.0)
a=Async()
a.loop.run_until_complete(a.function("hello_world"))
これは、作業を行います。
私は次のことを試してみました私は
a.function("hello_world")
にfunction
を呼び出すコードの構文を簡素化することができるようにデコレータを作成したいと思います:
class Async:
def __init__(self):
self.loop=asyncio.get_event_loop()
def async_loop(f):
def decorated(*args, **kwargs):
self.loop.run_until_complete(f(*args, **kwargs))
@async_loop
async def function(self, word):
print(word)
await asyncio.sleep(1.0)
a=Async()
a.function("hello_world")
私はエラーが表示されるその時点で:'NoneType' object is not callable
。私はクラスの外でデコレータ機能を持っているようにもしようとしましたが、私は同じエラーを受けました。デコレータ機能が最も優れているかどうかは、(メソッドとしての)claassの内側にあるのか、外部にあるのかは分かりません。 私は非常にPythonに新しく、クラスのAsyncio、デコレータ、デコレータはまだ私にとってはかなり混乱しています。どんな良い魂も、そのコードを正しく行う方法を知っているだろうか?
あなたはClassic Blundersの1つをコミットしました。 'async_loop'は'装飾された 'を返さなければなりません。 – PaulMcG
@PaulMcG OKはい - 私は 'self.loop'に関連した他のエラーを受け取りました。それは私のためにクラスでデコレータを行う方法がまだまだとても混乱しているので、ここで大いに助けになるでしょう –