Toidicode.com

Toidicode.com

BASIC TO ADVANCE

Bài 15: Packages trong Python

Ở bài trước mình đã giới thiệu với mọi người về khái niệm Module, các module trong Python và cách tự build module cho riêng mình rồi. Nhưng về phần cuối bài mình có nói là nếu như file modules các bạn để trong thư mục con nằm trong cấp với thư mục cần import modules thì nó sẽ không sử dụng được. Và hôm nay thì mình sẽ giới thiệu với các bạn cách import như thế mà không cần phải cấu hình path loader qua khái niệm package.

1, Package là gì?

Package trong Python là một thư mục chứa một hoặc nhiều modules hay các package khác nhau, nó được tạo ra  nhằm mục đích phân bố các modules có cùng chức năng hay một cái gì đó, để dễ quản lý source code.

VD: ví dụ một package views thì nó sẽ chứa các modules liên quan đến views.

2, Build package trong Python.

Để tạo ra một package trong python thì mọi người chỉ cần tạo ra một thư mục, với tên thư mục chính là tên của package và trong thư mục này nhất định phải có một file có tên __init__.py. File __init__.py này nó giống như các constructor, và nó sẽ được gọi ra đầu tiên khi chúng ta import package đó.

Nói lý thuyết có vẻ rườm rà, nên để dễ hiểu hơn thì mọi người có thể tham khảo ví dụ sau.

VD: Đầu tiên mọi người tạo cho mình một thư mục mới có cấu trúc như sau:

|demopackage/__init__py
|main.py

Bây giờ mọi người mở file __init__.py ra và viết cho mình đoạn code sau vào:

# __init__.py
print("Duoc in tu file __init__py")

Tiếp đó, ở file main.py các bạn import package demopackage vào như sau:

# main.py
import demopackage

Sau đó các bạn chạy file main.py, sẽ thu được kết quả như sau:

Duoc in tu file __init__py

Như vậy các bạn đã hiểu về file __init__.py trong package chưa ạ!.

3, Import package.

Để import các package thì các bạn sử dụng cú pháp giống như đối với modules. Nhưng bây giờ các bạn sẽ phải gọi từ package -> module.

VD: Trong thư mục demopackage ở ví dụ trên các bạn tạo cho mình file module.py.

Cấu trúc thư mục:

|--demopackage/
|             |--modules.py
|             └── __init__py
|--main.py

Và ở trong file modules.py các bạn tạo cho mình 2 hàm như sau:

# demopackage/modules.py
def say_hello():
    print("Hello!")

def say_goodbye():
    print("Goodbye!")

Lúc này khi muốn import modules.py vào main.py thì mọi người sẽ gọi như sau:

# main.py
from demopackage.modules import *
# Duoc in tu file __init__py

say_hello()
# Hello!

say_goodbye()
# Goodbye!

hoặc

# main.py
import demopackage.modules
# Duoc in tu file __init__py

demopackage.modules.say_hello()
# Hello!

demopackage.modules.say_goodbye()
# Goodbye!

hoặc

# main.py
import demopackage.modules as modules
# Duoc in tu file __init__py

modules.say_hello()
# Hello!

modules.say_goodbye()
# Goodbye!

4, Package chứa package.

Đối với package trong Python thì nó cũng có thể chứa 1 hoặc nhiều package khác trong nó, và không dưới hạn số lần chứa đó nhưng các bạn vẫn phải luôn tuân thủ quy tắc của 1 package là phải có file __init__.py. Tức là package a chứa package b và package b lại chưa package c,...

VD: Cũng với thư mục trong VD ở phần 3 mình sẽ tạo thêm 1 package con nằm trong demopackage có tên là packagechild chứa 2 file childmodule.py__init__.py như sau:

Cấu trúc thư mục:

|--demopackage/
|             |--modules.py
|             |--packagechild/
|                            |-- childmodule.py
|                            └── __init__py
|             └── __init__py
|--main.py

file childmodules.py:

# packagechild/childmodule.py
def say():
    print("childmodule.py: Hello")

file __init__.py:

# packagechild/__init__.py
print("childpackage __init__.py")

Lúc này ở file main.py các bạn chỉ cần import theo đúng cấp package.

# main.py
from demopackage.packagechild.childmodule import *
# childpackage __init__.py

say()
# childmodule.py: Hello

5, Lời kết.

Phần này tương đối quan trong và rất dễ học lên các bạn chú ý giúp mình nhé!

Đăng ký nhận tin.

Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!

Vũ Thanh Tài

About author
The best way to learn is to share
Xem tất cả bài đăng

11 Comments

Cám ơn bạn, rất dễ hiểu ạ!

Thảo Trịnh

4 năm trước

thưa anh  Tài, tuổi tác đâu quan trọng trong việc học lập trình đúng không vậy anh?

Fusion Reactor

4 năm trước

thế anh mấy tuổi mới học

aj

4 năm trước

cháu học mấy ngôn ngữ kia lúc 13 tuổi, còn cái này lúc cháu 15

Fusion Reactor

4 năm trước

là bây giờ cháu đang 15 tuổi.

Fusion Reactor

4 năm trước

thế anh cũng có đam mê giống em, em hiện tại cũng 15 tuổi và có ươc mơ làm IT. Anh hiện tại cũng đã 18 tuổi rồi nhỉ, chúc anh thành công nhé!

Nhật học code

11 tháng trước

cho e hỏi nút dislike nằm ở đâu thế 

Shin

4 năm trước

Trong quần bạn ấy

ngu vc

12 tháng trước

Có ứng dụng nào đọc main.py rồi vẽ ra sơ đồ của chương trình như là bản vẽ của tòa nhà không? Để người khác đọc bản vẽ mà biết sửa, nâng cấp chương trình

Nguyễn Khánh Toàn

2 năm trước

_init_.py có thể nói nôm na nó là gì không ạ, mình làm ví dụ đầu tiên về nó thì không chạy được, và các package ở sau khi mình không có _init_.py thì vẫn chạy được

nguyễn tấn lực

2 năm trước

Bạn ơi mình hỏi là nếu module cha chứa 2 modules con mà muốn import một lúc 2 modules con cùng cấp thì mình làm như nào nhỉ, xin cảm ơn

JN

9 tháng trước

Bình luận

Captcha