Sometimes I want to reference a class + method in some setup code but really use bound method of an instance. This is quite easy to do with Injector:
import injector from dataclasses import dataclass @injector.inject @injector.singleton @dataclass class BoundMethodProvider: _container: injector.Injector def __call__(self, meth): class_name = meth.__qualname__.rsplit('.', 1) interface = meth.__globals__[class_name] instance = self._container.get(interface) method_name = meth.__name__ return getattr(instance, method_name) container = injector.Injector() provider = container.get(BoundMethodProvider) bar = provider(Foo.bar)
Container will get you and instance of an interface with all it’s dependencies provided. Cool.