我想对我的一个 api 类进行抽象来解决以下问题。假设我有一个如下基类:
class AbstractAPI(ABC):
@abstractmethod
def create(self):
pass
@abstractmethod
def delete(self):
pass
还有一个具体的类:
class API(AbstractAPI):
def create(self):
print("create")
def delete(self):
print("delete")
当请求进来时,我无法访问我的 API 实例。这既是因为多线程,也是为了避免一些循环导入。那时我确实知道稍后要调用哪种方法。所以我的计划是将 AbstractAPI 的函数指针放入队列并等待,直到我可以访问 API 实例。
function_pointer=AbstractAPI.create
# later on ...
function_pointer(ConcreteAPIInstance)
此时,将函数指针调用到 API 实例上,ba da bim,ba da boom。这不起作用。当然,将 AbstractAPI 的函数指针调用到 API 实例上会调用空的 AbstractAPI 方法。什么也没发生。有办法让它工作吗?
您可以编写一个函数来调用给定对象上的
function_pointer=AbstractAPI.create
命名方法,而不是直接引用抽象类方法。create()
或者
一种方法是
operator.methodcaller
在调用时查找给定对象上的命名方法:输出如下: