Gostaria de fazer uma abstração de uma das minhas classes de api para resolver o seguinte problema. Digamos que eu tenha uma classe base como:
class AbstractAPI(ABC):
@abstractmethod
def create(self):
pass
@abstractmethod
def delete(self):
pass
E uma classe concreta:
class API(AbstractAPI):
def create(self):
print("create")
def delete(self):
print("delete")
Quando as solicitações chegam, não tenho acesso à minha instância da API. Ambos devido ao multithreading e para evitar algumas importações circulares. Nesse ponto, sei qual método gostaria de chamar mais tarde. Então, meu plano era colocar um ponteiro de função de AbstractAPI em uma fila e esperar até ter acesso à instância da API.
function_pointer=AbstractAPI.create
# later on ...
function_pointer(ConcreteAPIInstance)
Nesse ponto, chame o ponteiro de função para a instância da API, ba da bim, ba da boom. Isso não funciona. Claro que chamar o ponteiro de função de AbstractAPI para uma instância da API chama o método AbstractAPI vazio. Nada acontece. Existe uma maneira de fazer isso funcionar?
Em vez de referenciar diretamente o método da classe abstrata
function_pointer=AbstractAPI.create
, você pode escrever uma função que chama ocreate()
método nomeado em um determinado objeto.ou
Uma abordagem seria usar
operator.methodcaller
para procurar o método nomeado em um determinado objeto no momento de uma chamada:Isso produz: