假設我有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
裝飾。
謝謝!