[PyACC 8] Python - Những kiến thức cơ bản - P2.1
Module và Import
Về cơ bản, một Module là một file, trong đó các class, hàm và biến được định nghĩa.
Module cung cấp cho code của chúng ta:
- Khả năng tái sử dụng: Module có thể được sử dụng ở trong phần Python code khác, do đó làm tăng tính tái sử dụng code.
- Khả năng phân loại: Code cùng nhóm chức năng có thể gom nhóm lại với nhau giúp chúng ta dễ tìm kiếm
Chúng ta không cần khai báo module trong Python. Để tạo ra một module, chúng ta đơn giản chỉ cần gom nhóm những code có cùng chức năng vào cùng 1 file. Ví dụ:
# Trong file calculator.py
def x_sum(a, b):
return a + b
def x_sub(a, b):
return a - b
def x_pow(a, b):
return a ** b
Sau khi tạo file calculator.py với nội dung trên. Ta có thể coi nó là một module và có thể sử dụng các hàm của nó trong một file khác bằng câu lệnh import.
# Trong file main.py
import calculator
if __name__ == '__main__':
x = calculator.x_sum(a=1, b=1)
print(x)
Hoặc nếu chúng ta chỉ cần một số hàm trong module đó, chúng ta có thể chọn cách import với from.
# Trong file main.py
from calculator import x_sum
if __name__ == '__main__':
x = x_sum(a=1, b=1)
print(x)
Thư viện là gì?
Các thư viện trong Python được gọi với tên là packages. Mỗi package là tập các mã nguồn giải quyết một số công việc nào đó, nhóm chức năng nào đó mà những người sáng tạo ra chúng thấy rằng nhất định phải publish nó ra thế giới bên ngoài để người khác có thể dùng ngay mà không cần phải làm lại từ đầu.
Nói dài dòng như vậy nhưng tóm gọn lại thì:
- Thư viện là tập hợp mã nguồn được viết trước, nó cung cấp một số hàm nào đó.
- Bất kỳ ai cũng có thể tạo ra thư viện.
- Thư viện sẽ xuất bản ra bên ngoài để mọi người dùng lại, giúp tiết kiệm thời gian và công sức code.
OK. Vậy thì các thư viện do cộng đồng lập trình viên Python tạo ra ở đâu?
Câu trả lời là PyPI - https://pypi.org/.
PyPi là viết tắt của Python Package Index, 1 repository lưu trữ các package của python.
Để sử dụng được thư viện trên PyPI trong project, chúng ta chỉ cần dùng pip là đủ.
Ví dụ: Bạn muốn cài thử viện requests vào trong project để sử dụng, bạn chạy lệnh:
pip install requests
Sau khi cài đặt xong, các bạn có thể sử dụng thư viện này bằng cách import nó giống như một module bình thường.
Lưu ý để sử dụng đúng nhất thì bạn phải xem hướng dẫn của người viết ra thư viện nhé! Xem ảnh dưới đây để biết thêm chi tiết.
Ở trên hình, họ đang ví dụ cách sử dụng thư viện của họ với Python Console. Nếu đưa vào code thì khác đi đôi chút. Nó sẽ trông thư thế này!
import requests
r = requests.get('https://httpbin.org/basic-auth/user/pass', auth=('user', 'pass'))
print(r.status_code)
print(r.headers['content-type'])
print(r.encoding)
print(r.text)
print(r.json())
Lập trình hướng đối tượng
Python hỗ trợ lập trình hướng đối tượng - OOP. Nếu bạn nào chưa biết "lập trình hướng đối tượng - OOP là gì?" có thể đọc thêm trên Google nhé.
Về cơ bản lập trình hướng đối tượng trong Python rất dễ.
Một class sẽ trông như thế này:
class Dog:
legs = 4
def __init__(self, name):
self.name = name
def say_hello(self):
return 'gâu gâu'
Ở đây chúng ta có một class Dog với:
- Thuộc tính legs - số chân, gán mặc định là 4.
- Thuộc tính name sẽ được dùng tới trong hàm khởi tạo, trong trường hợp của name, ta không nhất thiết phải khai báo trước giống như legs.
- Một hàm khởi tạo __init__, bắt buộc truyền name - tên của chú chó khi khởi tạo đối tượng.
Trong hàm này, ta chỉ làm một việc rất đơn giản là lưu name vào giá trị self.name. - self trong Python là đại diện cho thể hiện của lớp. Bằng cách sử dụng từ khóa “self”, chúng ta có thể truy cập các thuộc tính và phương thức của lớp trong python.
- Hàm say_hello đơn giản là trả về tiếng gâu gâu của chú chó khi chúng ta chào nó.
OK. Bây giờ, chúng ta gặp một con Husky. Nó là một con chó với khả năng say_hello là "gâu gâu gâu", hơn hẳn một lần "gâu" so với những con chó khác.
Vậy Husky sẽ trông như thế này.
class Husky(Dog):
def say_hello(self):
hello = super(Husky, self).say_hello()
new_hello = "gâu " + hello
print(new_hello)
Ở đoạn này chúng ta sẽ tạo một class Husky - kế thừa class Dog. Khi viết class con kế thừa class cha thì class cha sẽ nằm trong cặp ngoặc ().
Và vì nó "gâu" tận 3 lần nên chúng ta sẽ phải override phương thức say_hello của class cha.
Override phương thức của class cha có thể hiểu đơn giản là viết lại hàm cùng tên của class cha nhưng theo logic khác đi.
Trong một số trường hợp override, chúng ta vẫn muốn có kết quả thực thi của phương thức trong class cha thì khi đó chúng ta sẽ dùng đến bảo bối super().
Hãy nhìn dòng tương ứng có chữ super ở đoạn code trên nhé!
Ok. Bây giờ, để tạo ra một con Husky và bắt nó say_hello, thì chúng ta sẽ làm như sau:
if __name__ == '__main__':
husky = Husky(name='Đần')
husky.say_hello()
Đó! Về cơ bản là dễ đúng không ạ!
Trên thực tế công việc của mình, mình thấy rằng hầu hết các trường hợp cũng chỉ cần chừng này kiến thức. Do đó những kiến thức nâng cao khác mà ít dùng mình sẽ không đề cập ở đây.