【发布时间】:2019-02-26 18:33:32
【问题描述】:
我正在为 API 构建一个包装器。目前,它有效。但是,它是同步的,使用请求模块进行 HTTP 调用。
我想实现一种方法来异步调用这些方法,而不必使用不同的名称或 lib 版本。我立刻想到了重载,但是看到python中的重载与其他语言有点不同,看起来不太可能。
基本上,我想构建一个看起来像这样的类(从想法上讲,我知道它在 Python 中不起作用):
class Foo:
def foo(self):
# Requests code...
print("foo sync")
async def foo(self):
# aiohttp code...
print("foo async")
并以这种方式使用它:
f = Foo()
f.foo()
await f.foo()
输出:
>> "foo sync"
>> "foo async"
基本上,在这段代码中,异步函数会完全覆盖前一个函数,这并没有真正的帮助。
通过谷歌搜索,这看起来不太可能,但是,Python 总是设法让我感到惊讶。
提前致谢:D
【问题讨论】:
-
为什么不只创建
foo()和foo_async()方法来处理特定的用例呢?为 API 用户定义显式方法(几乎)总是比根据其用途让单个方法执行不同的方法更好 - 对于初学者来说,它可以避免混淆,并且不会强迫用户阅读有关该方法如何为他们和他们执行的详细文档用例。 -
@zwer 是的,所以我想到了这一点,但后来我认为能够使用重载样式语法会更方便。既然你这么说,我觉得还是把方法分开比较好。无论如何,我将不得不复制大部分代码(因为异步需要一直异步,AFAIK),这样会更具可读性。感谢您的建议。
标签: python python-3.x oop async-await python-requests