假设我有BaseClass
其中包含main_function()
中的一些逻辑,这对SyncClass
和AsyncClass
都是通用的。假设这两个类别具有其独特的实现方式get_data()
,前者采用同步方式,而后者采用异步方式。我写了这样的事情,它似乎工作:Python中的抽象方法异步和同步实现
class BaseClass:
def get_data():
pass
@gen.coroutine
def main_function():
# some logic
try:
data = yield self.get_data()
except:
data = self.get_data()
# some more logic
class SyncClass(BaseClass):
def get_data():
//makes sync call to Mongo and gets data (using Mongoengine)
class AsyncClass(BaseClass):
@gen.coroutine
def get_data():
//makes async call to Mongo and gets data (using Motorengine)
我用这个代码作为一种解决方法,因为我已经有用于GET_DATA这些方法()来实现的方式。有没有更优雅的解决方案?有我的代码有2部分关注我:
try:
data = yield self.get_data()
except:
data = self.get_data()
我不想使用try/except here。
另一件事是:我在AsyncClass
@gen.coroutine
而同样的功能没有在BaseClass
与@gen.coroutine
装饰。
谢谢!