2.1 Làm quen với packages
Packages là cách để cấu trúc hóa các modules trong thư mục.
Package là thư mục, chứa file
__init__.py
và một hoặc nhiều modules. File
__init__.py
có thể trống hoặc chứa code
khởi tạo cho package.
Ví dụ cấu trúc của package/thư mục
mypackage/
__init__.py
module1.py
module2.py
Nội dung của file __init__.py |
---|
|
Nội dung của file module1.py |
---|
|
Nội dung của file module2.py |
---|
|
Ví dụ mã sử dụng các hàm từ package này:
import mypackage
print(mypackage.func1()) # Xuất ra: Function 1
print(mypackage.func2()) # Xuất ra: Function 2
Cùng thử viết package của riêng mình dưới đây, và tìm hiểu cách hoạt động của package khác.
2.2 Tạo package của riêng bạn từng bước
Bước 1: Tạo cấu trúc package
Bước đầu tiên là tạo cấu trúc thư mục và file cho package của bạn.
Ví dụ, chúng ta sẽ tạo một package tên là
mypackage
, chứa hai modules:
module1.py
và module2.py
.
Ví dụ cấu trúc package:
mypackage/
__init__.py
module1.py
module2.py
Mô tả file:
-
__init__.py
: File này có thể trống hoặc chứa mã khởi tạo package. Nó cần thiết để Python nhận diện thư mục như là một package. -
module1.py
vàmodule2.py
: Những file này chứa các hàm, lớp và biến mà bạn muốn đưa vào package của mình.
Bước 2: Viết mã cho các modules
Viết mã đơn giản cho các modules của chúng ta.
module1.py
def func1():
return "Function 1 from module1"
module2.py
def func2():
return "Function 2 from module2"
__init__.py
Để nhập các hàm từ các module của chúng ta lên mức package, hãy thêm chúng vào
__init__.py
.
from .module1 import func1
from .module2 import func2
Bây giờ, khi bạn import package, các hàm func1
và func2
sẽ có sẵn
trực tiếp.
Bước 3: Kiểm tra package
Tạo một file test.py
trong cùng thư mục với thư mục mypackage
, và
sử dụng package trong file này để kiểm tra.
test.py
import mypackage
print(mypackage.func1()) # Xuất ra: Function 1 from module1
print(mypackage.func2()) # Xuất ra: Function 2 from module2
Chạy test.py
để đảm bảo package của bạn hoạt động đúng.
2.3 Sử dụng hàm dir()
Khi bạn import một module hoặc package, bạn có thể sử dụng
hàm dir()
để lấy danh sách tất cả
các thuộc tính và phương thức có sẵn trong module đó. Điều này đặc biệt hữu ích nếu bạn
làm việc với một module mới hoặc không quen thuộc và muốn nhanh chóng biết các
hàm và lớp mà nó cung cấp.
Ví dụ: Khám phá module chuẩn math
Hãy xem một ví dụ sử dụng dir()
để khám phá
module chuẩn math
.
import math
print(dir(math))
Đoạn mã này import module math
và xuất danh sách tất cả các thuộc tính và
phương thức có sẵn. Kết quả sẽ trông giống như sau:
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan',
'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1',
'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf',
'isnan', 'isqrt', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'perm', 'pi', 'pow', 'prod',
'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']
Danh sách này bao gồm tất cả các hàm và hằng số, được định nghĩa
trong module math
, như sin
, cos
, tan
, pi
và các hàm khác.
Sử dụng dir()
cho modules tùy chỉnh
Bạn cũng có thể sử dụng dir()
cho
modules tùy chỉnh (của bạn). Giả sử bạn có một file mymodule.py
với
nội dung sau:
# mymodule.py
def greet(name):
return f"Hello, {name}!"
pi = 3.14159
Bạn có thể import module này và sử dụng dir()
để khám phá
nội dung của nó:
import mymodule
print(dir(mymodule))
Kết quả sẽ như sau:
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__',
'greet', 'pi']
Danh sách bao gồm 8 thuộc tính hệ thống (được đóng khung bằng gạch dưới) của module
mymodule
, và cuối cùng là phương thức greet
và biến pi
của bạn.
GO TO FULL VERSION