Chaofa p88 nhà cái Yuan, ngày 11 tháng 12 năm 2023, khoảng 5 phút đọc python-type-challenge python-typing-tutorial python-type-tutorial
Nội dung trang này:
-
Hướng dẫn đọc
-
Các kiểu nâng cao trong Python Type
-
* Protocol - Giao thức
- Tái định nghĩa
-
* override - Tái định nghĩa phương thức lớp
- overload - Tái định nghĩa chữ ký hàm
- ForwardRef - Kiểu tham chiếu trước
- Generator - Bộ sinh
- Never
- TypeGuard
- TupleVar
- ParamSpec
-
Đối tượng độc giả
- Có nền tảng Python cơ bản và cần phát triển dự án lớn hơn.
- Người đã có kinh nghiệm lập trình với ngôn ngữ có kiểu tĩnh khác và muốn hiểu nhanh về chú thích kiểu trong Python (type hint).
- Nếu bạn chưa quen, hãy đọc hai bài đầu tiên trước.
- Bạn sẽ học được gì?
- Cách Python định nghĩa
protocol
. - Làm thế nào để tái định nghĩa phương thức lớp và chữ ký hàm trong Python.
- Sử dụng các kiểu như tham chiếu trước, bộ sinh, Never,…
- …
- Khuyến khích tự hoàn thành các bài tập trên Python-Type-Challenges.
- Cách Python định nghĩa
Bài viết này dựa theo phân loại của thư viện Python-Type-Challenges[1], gồm bốn phần:
- Bài Tập Thể Dục Kiểu Python (Một) – Cơ Bản
- Bài Tập Thể Dục Kiểu Python (Hai) – Trung Cấp
- Bài Tập Thể Dục Kiểu Python (Ba) – Nâng Cao (bài này)
- Bài Tập Thể Dục Kiểu Python (Tư) – Cực Kỳ Nâng Cao (chưa làm được)
Các kiểu nâng cao trong Python Type
Protocol - Giao Thức
Protocol
giống cách định nghĩa abc
, biểu thị rằng kiểu này có những phương thức nhất định.
sunvip.club * Ví dụ: Lớp Duck có phương thức quack
.
|
|
Tái Định Nghĩa
override - Tái định nghĩa phương thức lớp
Tính năng này rất phổ biến trong các ngôn ngữ khác, cho phép con lớp tái định nghĩa phương thức từ lớp cha. Xem ví dụ sau:
|
|
Với từ khóa override
, vấn đề trên sẽ không xảy ra:
|
|
overload - Tái định nghĩa chữ ký hàm
Điều này không phải là tái định nghĩa thực sự, mà chỉ đơn giản là tái định nghĩa chữ ký mà không cần cài đặt thực tế.
- Snippet code dưới đây lấy từ Python-Type-Challenges
process
không được cài đặt lại thật sựoverload
phải trước khi thực hiệnprocess
|
|
ForwardRef - Tham Chiếu Trước
- Example 1, Khi sử dụng một kiểu mà nó chưa được định nghĩa hoàn chỉnh nhưng chúng ta vẫn muốn định nghĩa giá trị trả về. Lúc này cần dùng tham chiếu trước, cú pháp là «biến bọc trong dấu ngoặc kép», ví dụ
copy
trả về"MyClass"
.
|
|
- Example 2, Định nghĩa vòng lặp kiểu. Định nghĩa một từ điển gọi là
Tree
, key là str, value làTree
.
|
|
Generator - Bộ Sinh
Cú pháp: Generator[YieldType, SendType, ReturnType]
, chi tiết xem game winvn ví dụ:
|
|
Never
Thông thường dùng để biểu thị một hàm sẽ không bao giờ được gọi hoặc không có giá trị trả về.
- Example 1, Không bao giờ được gọi
|
|
- Example 2, Không có giá trị trả F88 Casino Download Game Bài về
|
|
TypeGuard
Dùng để thu hẹp kiểu Python. Khi định nghĩa bằng TypeGuard
, trình kiểm tra kiểu sẽ biết hai thông tin:
- Giá trị trả về là kiểu boolean.
- Nếu trả về
True
, thì kiểu là kiểu bên trongTypeGuard
.
|
|
TupleVar
Sử dụng nâng cao của Generic
, biểu thị chấp nhận nhiều tham số parameterized generic.
|
|
ParamSpec
Cũng là cách sử dụng nâng cao của Generic
, thường dùng để truyền tham số. Thường áp dụng cho truyền và sửa đổi tham số của hàm bậc cao, ví dụ như decorator
nhận vào một hàm, ví dụ cụ thể:
|
|
Nếu không có ParamSpec
, chỉ có thể viết Callable[..., Any]
, kiểu này chỉ biết đó là một hàm, không suy luận được kiểu cụ thể của hàm.
[^1]. Python-Type-Challenges