Hãy xem xét kịch bản sau đây:Làm thế nào để ngăn chặn người dùng từ nhập khẩu x từ một submodule khi nó tiếp xúc trong phụ huynh sử dụng __all__
Bạn có một mô-đun
M
quy định tạim.py
chứa một hàmf
.Nó có thể được gọi là như thế này:
import M; M.f()
Module phát triển đến một kích thước mà nó là không thực tế để có trong một tập tin duy nhất. Bạn chia
M
thành submodulesM.X
,M.Y
,M.Z
và đặt sau đây trongM/__init__.py
:from .X import * from .Y import * from .Z import * __all__ = ["f"]
Mã ban đầu vẫn hoạt động:
import M; M.f()
Tuy nhiên, người tiêu dùng mới của mã có thể nhầm lẫn truy cập trực tiếp vào mô-đun con:
import M.X;
M.X.f()
Tôi muốn ngăn chặn điều này, sao cho tất cả mã vẫn liên tục giải quyết M trực tiếp và không phải bất kỳ mô-đun con nào.
Các mô-đun con là vì lợi ích của tổ chức mã nội bộ và tham chiếu M để lại khả năng sắp xếp lại dễ dàng trong tương lai.
Một tùy chọn sẽ là đặt tên các mô-đun con _X
, _Y
và _Z
để thông báo rằng chúng là nội bộ. Đó có phải là cách tiếp cận được khuyến nghị không?
Bạn không thích. Tại sao lại là một vấn đề? Mô-đun của bạn vẫn hoạt động, mã sử dụng các mục đó vẫn hoạt động. –
Tôi muốn ngăn chặn điều này, sao cho tất cả mã vẫn liên tục giải quyết M trực tiếp chứ không phải bất kỳ mô-đun con nào. Các mô-đun con là vì lợi ích của tổ chức mã nội bộ, và tham chiếu M bỏ khả năng sắp xếp lại dễ dàng trong tương lai. (Câu hỏi được chỉnh sửa để bao gồm chi tiết này.) –
tài liệu đúng cách để làm điều đó và tin tưởng người dùng của bạn sẽ đủ thông minh để làm theo lời khuyên của bạn –