Điều bạn đang nói đến được gọi là dependency injection và được xem là phương pháp hay để làm cho mã của bạn có thể kiểm tra. Tôi không nghĩ rằng có bất cứ điều gì về Python mà sẽ làm cho nó unPythonic hoặc một thực hành xấu.
Có nhiều cách khác bạn có thể làm điều đó bằng Python, ví dụ bằng cách nhập các module khác nhau tùy thuộc vào một số loại cờ bạn vượt qua trong:
class Foo(object):
def __init__(self, testing=False):
if testing:
import module_test as module
else:
import module
self.module = module
Nhưng qua một tham chiếu đến các module bạn muốn sử dụng là linh hoạt hơn, tách mối quan tâm tốt hơn và không kém phần Pythonic hơn là chuyển một tham chiếu đến một lớp hoặc một cá thể (hoặc chuỗi hoặc số nguyên) mà bạn muốn sử dụng.
Đối với trường hợp sử dụng thông thường (không kiểm tra), bạn có thể sử dụng một giá trị tham số mặc định:
class Foo(object):
def __init__(self, module=None):
if not module:
import module
self.module = module
Có vẻ như tiêm phụ thuộc và thực sự cũng giống như một ý tưởng hay. Tuy nhiên, bạn có thường xuyên cần một mô-đun toàn bộ, thay vì một hoặc hai chức năng/lớp học không? – delnan