Hướng dẫn oops in python - oops in python
Như bài trước thì mình đã đi tìm hiểu qua cơ bản về biến và kiểu dữ liệu trong python. Nếu bạn nào chưa xem thì xem tại đây. Còn phần này mình sẽ đi qua về OOP (Object Oriented Programming) trong python. Let's go. Khái niệm Python là một ngôn ngữ hướng đối tượng. Vì vậy hầu hết mọi thứ trong Python đều là những đối tượng với những thuộc tính (properties) và phương thức (methods). OOP là một kĩ thuật lập trình cho phép tạo ra các đối tượng để trừu tượng hóa 1 đối tượng thực tế (đưa các đối tượng trong thực tế vào trong code). Cho phép lập trình viên tương tác với các đối tượng này. Một đối tượng bao gồm: thuộc tính (attributes) và phương thức (methods).
Lớp có thể hiểu là một bản thiết kế để tạo ra một thực thể nào đó, là tập hợp nhiều thuộc tính đặc trưng cho đối tượng được tạo ra từ lớp này. VD: Con mèo (tên, màu sắc, có đuôi, tai, chân, ...) Đối tượng là một thực thể của 1 lớp nào đó, được tạo ra từ lớp đó. VD: Mèo mun (tên là mèo mun, màu đen, có đuôi dài, 2 tai, 4 chân, ....) OOP tuân theo một số nguyên lý cơ bản, gồm có 4 nguyên lý: TÍnh đóng gói, Tính kế thừa, TÍnh bao đóng, Tính đa hình. Các nguyên lý cơ bản của OOP
Python là một ngôn ngữ hướng đối tượng nên cũng tuân theo các nguyên lý cơ bản của OOP. Class, methods, attributes -Trong python có nhiều lớp đã được định nghĩa sẵn. Do mọi thứ trong python đều là đối tượng ví dụ như list, tuple, dictionary, string, int… là các lớp. Khi chúng ta khai báo biến thuộc các lớp này thì chúng là các đối tượng, nếu các bạn không tin thì có thể sử dụng hàm Ngoài các class có sẵn thì chúng ta có thể định nghĩa ra các lớp riêng biệt sử dụng từ khóa class: Trong ví dụ trên chúng ta đã tạo một đối tượng mới là hl nên type của nó là instant - 1 thể hiện của lớp helloWorld, còn helloWorld là một lớp - class. Bên trong lớp pass - cú pháp cho việc chưa biết nên xây dựng nó như thế nào, chưa biết nên code sao cho tối ưu và muốn để lại làm sau. Nhưng hàm, lệnh đó không thể có một khối lệnh rỗng, trình biên dịch sẽ báo lỗi, vì thế, chỉ cần sử dụng lệnh pass để xây dựng một khối lệnh rỗng, lúc này trình biên dịch sẽ hiểu và bỏ qua. Thay thế cho pass chúng ta có thể khai báo các thuộc tính và phương thức ở đây. -Thuộc tính có thể hiểu là một biến trong class, thuộc tính mô tả các đặc tính của một đối tượng. Trong Python có một phương thức đặc biệt gọi là 0 dùng để khởi tạo giá trị cho các thuộc tính của một đối tượng. Phương thức 0 là phương thức khởi tạo của tất cả các lớp, mỗi khi tạo một đối tượng phương thức này sẽ tự động được gọi. Bất cứ phương thức nào của Python cũng đều phải có tham số đầu tiên là self rồi mới đến các tham số khác. self ám chỉ đối tượng đã được gọi đó. Chẳng hạn trong ví dụ trên khi chúng ta gọi pug = dog('bug') thì self chính là đối tượng pug.Ngoài những thuộc tính phải khai báo khi tạo 1 đối tượng mới thì chúng ta có thể khai báo các thuộc tính có sẵn với mọi class được tạo ra và ko cần phải gán khi khai báo. VD: legs -Phương thức thực chất là các các hàm trong class, thực hiện các công việc cụ thể:
Các phương thức có sẵn được kế thừa từ lớp gốc - magic method -Phương thức 0 như trên đã trình bày, khởi tạo các tham số, thuộc tính của class-Ngoài ra còn có 3, 4, 5, 6, 7, 8, 9, 0, 1, ... Hiểu thêm về magic method ở đâyTính bao đóng Về bản chất trong python thì các khái niệm về private, protected, public không có, trong code chúng ta chỉ ám chỉ điều này cho việc truy cập cho đúng:
Kế thừa trong python -Cú pháp kế thừa: 2
Trong ví dụ trên chúng ta định nghĩa hai lớp là là Animal và lớp Dog. Lớp Dog kế thừa từ lớp Animal, sử dụng lại một số phương thức, thuộc tính của lớp Animal và có các phương thức của riêng nó. Ở trên lớp Dog kế thừa phương thức eat(), kế thừa và thay đổi phương thức whoAmI(), ngoài ra lớp Dog còn có phương thức của riêng nó là phương thức run(). Ta có thể thấy lớp dog đã sử dụng lại thuộc tính legs và thay đổi giá trị của thuộc tính này là 4. Để kế thừa một lớp thì chúng ta đặt tên lớp đó bên trong cặp dấu ngoặc tròn () ngay phía sau phần định nghĩa tên lớp. Như ví dụ trên là đơn kế thừa - kế thừa từ một class. Trong python thì chúng ta có thể đa kế thừa - cho phép từ 1 class con có thể kế thừa từ nhiều class cha.
Ở ví dụ trên thì lớp Dog đã kế thừa từ 2 lớp cha là Animal và Entity. Interface, abstract class -abstract class: Các Abstract class cho phép bạn cung cấp chức năng mặc định cho các class con. Bằng cách định nghĩa một abstract base class (lớp cơ sở trừu tượng), bạn có thể xây dựng nên một mô hình chung cho một nhóm các class con. Mặc định trong Python sẽ không cung cấp Abstract class cho chúng ta sử dụng. Nhưng Python có một mô-đun gọi là Abstract Base Classes (ABC) để giúp chúng ta làm điều đó. Mô-đun này nằm trong package abc nên chúng ta cần import vào trước khi sử dụng.
-Từ khóa @ abstractmethod: để khai báo rằng phương thức phía dưới là phương thức abstract
-Interface: Trong python không biết có đúng không nhưng thấy ít tài liệu nói về cái này trong python, có ý nói rằng interface thực sự không cần thiết bởi vì trong python có đa kế thừa. Nhưng bạn vẫn có thể tạo Interface từ lớp ABC tương tự ở trên.
Bài này cũng dài rồi, mình chỉ đi qua các phần cơ bản của OOP còn chi tiết chắc cần tìm hiểu từng phần và kĩ hơn. Cảm ơn bạn đã quan tâm |