Hướng dẫn dùng changeable definition python
Python là một ngôn ngữ cho phép chúng ta lập trình theo nhiều paradigm khác nhau: Lập trình thủ tục, lập trình hàm, lập trình hướng đối tượng, lập trình mệnh lệnh. Điều đó có nghĩa là chúng ta có thể sử dụng Python để giải quyết các bài toán theo rất nhiều hướng tiếp cận khác nhau. Trong bài viết này, chúng ta tạm thời chỉ tập trung vào cách thức lập trình hướng đối tượng mà thôi. Đây cũng là một trong số những paradigm phổ biến nhất hiện nay. Python và lập trình hướng đối tượngTrong lập trình hướng đối tượng, một đối tượng cần phải có những yếu tố sau:
Đây là kiến thức cơ bản nên có lẽ không cần bàn nhiều nữa. Cái đáng nói ở đây là việc Python triển khai những thứ này như thế nào trong ngôn ngữ. Python tập trung việc lập trình hướng đối tượng vào việc tạo ra các code dễ dàng tái sử dụng. Tư tưởng này được gọi là DRY (Don't Repeat Yourself), một tư tưởng rất phổ biến trong mọi ngôn ngữ nói chung. Trong Python, việc lập trình hướng đối tượng sao cho DRY tuân theo những nguyên tắc sau, đây cũng những tính chất quan trọng nhất của lập trình hướng đối tượng:
ClassClass (lớp đối tượng) là tập hợp các đối tượng có một đặc điểm chung nào đó. Tất nhiên là đặc điểm chung đó phải được xây dựng dựa trên bài toán cụ thể chứ không phải đặc điểm bất kỳ nào. Chúng ta có thể định nghĩa một class trong Python như sau:
Python cho phép chúng ta tạo ra một class trống mà không có thuộc tính cũng như phương thức này. Từ class này, chúng ta có sẽ tạo ra các instance, đó chính là các đối tượng được nhắc đến thường xuyên trong mô hình lập trình này. Đối tượngTrong Python, chúng ta có thể hiểu đối tượng là một vùng bộ nhớ chứa tất cả những dữ liệu về đối tượng đó. Một biến được gán cho một đối tượng đơn giản là nó có thông tin để lấy dữ liệu từ vùng nhớ đó ra mà thôi. Với cách làm như này, Python cho chúng ta cách thức rất dễ dàng để gán biến cho một đối tượng khác, ngay cả khi kiểu dữ liệu của chúng khác nhau:
Mọi đối tượng trong Python có một định danh riêng, dùng để xác định địa chỉ vùng nhớ lưu giá trị của nó. Ngoài ra, một thông tin quan trọng khác mà mọi đối tượng phải nắm giữ chính là kiểu dữ liệu của chúng. Một vài kiểu dữ liệu phức tạp hơn có thể có chứa thông tin liên kết đến các đối tượng khác. Ví dụ một list chẳng hạn, nó cần phải chứa thông tin vùng nhớ của từng phần tử trong list đó. Python có hai hàm được định nghĩa sẵn là
Chúng ta cũng có thể tự định nghĩa một class và xây dựng các đối tượng từ class đó như sau:
Trong đoạn code trên, chúng ta đã tạo ra một class, rồi tạo ra các đối tượng từ class đó. Các đối tượng sẽ có những thuộc tính của riêng mình. Ngoài ra, nó còn có thuộc tính của cả class, truy cập thông qua Python có hai phương thức khác nhau để so sánh hai đối
tượng. Đó là so sánh Ví dụ dưới đây sẽ giải thích rõ hơn:
HashableTheo tài liệu của Python, một đối tượng được gọi là hashable (có thể hash được) nếu giá trị của nó không bao giờ thay đổi giá trị và có thể so sánh với các đối tượng khác. Hash là một số nguyên, đại diện cho giá trị của đối tượng đó. Vì đối tượng không thay đổi giá trị, hash của nó sẽ là cố định, vì vậy các đối tượng đó mới được gọi là hashable.
Python có hàm
Hashable rất quan trọng, bởi vì có những trường hợp đối tượng phải là hashable. Ví dụ key trong một dict phải là đối tượng hashable, các phần tử trong set cũng phải là hashable.
Các đối tượng trong python được phân chia thành hai loại: mutable và immutable. Các đối tượng thuộc kiểu cơ bản được định nghĩa sẵn trong Python cũng có loại là immutable, có loại là mutable. Các đối tượng có kiểu nguyên thuỷ như số, xâu ký tự, byte đều là immutable. Các đối tượng phức tạp hơn như tuple cũng là immutable trong khi list, set, dict lại là mutable. Chúng ta sẽ tìm hiểu kỹ hơn về các đối tượng này trong các phần sau. Ở đây, tôi chỉ muốn nói đến chuyện hashable. Các đội tượng được định nghĩa sẵn này phải là immutable thì mới hashable, trong khi các đối tượng mutable thì không. Ngoài các đối tượng được định nghĩa sẵn, Python cho phép chúng ta định nghĩa các class khác và tạo ra các đối tượng theo đúng bài toán của chúng ta. Các đối tượng này mặc định sẽ là mutable, nhưng một điều thật vi diệu là các đối tượng đó dù là mutable nhưng lại hashable.
|