To, o czym mówisz, nazywa się dependency injection i jest uważane za dobrą praktykę w testowaniu kodu. Nie sądzę, że Python ma cokolwiek, co sprawiłoby, że stałoby się ono nietypowe lub złą praktyką.
Istnieją inne sposoby, można to zrobić w Pythonie, na przykład przez importowanie różnych modułów w zależności od jakiejś flagi mijamy w:
class Foo(object):
def __init__(self, testing=False):
if testing:
import module_test as module
else:
import module
self.module = module
Ale przechodząc odniesienie do modułu, który chcesz użyć, jest bardziej elastyczny, lepiej oddziela obawy i jest nie mniej Pythoniczny niż przekazywanie odniesienia do klasy lub instancji (lub ciągu lub liczby całkowitej), których chcesz użyć.
Dla zwykłego (non-test) przypadków użycia, można użyć wartości domyślne Argument:
class Foo(object):
def __init__(self, module=None):
if not module:
import module
self.module = module
Wydaje się, że jest to wstrzyknięcie zależne od zależności i tak jak dobry pomysł. Jak często jednak potrzebujesz całego modułu, a nie jednej lub dwóch funkcji/klas? – delnan