Page 53 - Python Simple
P. 53
6. Mô-đun http://www.vithon.org/tutorial/2.5/node8.html
tại vì chúng được định nghĩa trong gói Sound.Effects khi câu lệnh
from...import được thực thi. (Cũng sẽ có cùng kết quả khi __all__ được định
nghĩa.)
Lưu ý là bình thường việc nhập * từ một mô-đun hay gói được coi là xấu, vì nó
hay dẫn tới các mã khó đọc. Tuy nhiên, khi dùng trong một phiên làm việc
tương tác thì nó giúp tiết kiệm công nhập phím, và một vài mô-đun được thiết
kế để chỉ xuất các tên theo một vài mẫu cụ thể.
Nhớ rằng, không có gì sai trái với việc dùng from Package import
specific_submodule! Đúng ra, đây là cách viết được khuyến khích trừ khi
mô-đun nhập (importing module) cần dùng mô-đun con có cùng tên ở một gói
khác.
6.4.2 Tham chiếu nội trong gói
Các mô-đun con thường cần tham chiếu lẫn nhau. Ví dụ, Mô-đun surround có
thể sử dụng mô-đun echo . Trong thực tế, những tham chiếu này quá phổ biến
đễn nỗi câu lệnh import đầu tiên sẽ tìm trong gói chứa (containing package)
trước khi tìm trong đường dẫn tìm kiếm mô-đun chuẩn. Do đó, mô-đun
surround có thể đơn giản dùng import echo hay from echo import
echofilter. Nếu mô-đun được nhập (imported module) không thể tìm ra trong
gói chứa (là gói mà mô-đun hiện tại là một mô-đun con), câu lệnh import tìm
một mô-đun cấp cao nhất có cùng tên.
Khi các gói được cấu trúc thành các gói con (như gói Sound trong ví dụ), không
có đường tắt để tham chiếu tới các mô-đun con của các gói kế cận - tên đầy đủ
của gói con phải được chỉ định. Ví dụ, nếu mô-đun Sound.Filters.vocoder cần
dùng mô-đun echo trong gói Sound.Effects , nó có thể dùng from
Sound.Effects import echo.
Bắt đầu từ Python 2.5, ngoài việc nhập tương đối hiểu ngầm (implicit relative
import) đã nói, bạn có thể viết lệnh nhập tương đối xác định (explicit relative
import) với kiểu from module import name của câu lệnh nhập. Các lệnh nhập
tương đối xác định dùng chấm ở đầu để chỉ định các gói hiện tại và gói cha có
mặt trong câu lệnh nhập. Ví dụ từ mô-đun surround , bạn sẽ dùng:
from . import echo
from .. import Formats
from ..Filters import equalizer
Lưu ý cả hai lệnh nhập tương đối xác định và hiểu ngầm đều dựa vào tên của
mô-đun hiện tại. Vì tên của mô-đun chính luôn luôn là "__main__", mô-đun
được nhằm dể dùng như mô-đun chính của một chương trình Python nên luôn
luôn cùng câu lệnh nhập tuyệt đối.
6.4.3 Gói trong nhiều thư mục
9 of 10 08/31/2011 10:26 AM