Bắt đầu từ bài học này, chúng ta sẽ chuyển sang lập trình hướng đối tượng với Python với trọng tâm là kỹ thuật xây dựng lớp
Python là một ngôn ngữ thiết lập hướng đối tượng. Tất cả các phần tử trong chương trình Python thực chất đều là các đối tượng từ các lớp đã xây dựng sẵn. int, float, str, danh sách, chức năng. Python cũng cung cấp khả năng xây dựng các lớp mới. Nhìn chung các kỹ thuật xây dựng lớp trong Python tương ứng với các đối tượng đơn giản hơn so với các ngôn ngữ như C++, C#, Java
Như đã trình bày ngay từ đầu, đây không phải là khóa học nhập môn lập trình với Python, cũng không phải là khóa học lập trình hướng đối tượng. Chúng tôi giả định rằng bạn đã nắm được những khái niệm cơ bản của lập trình hướng đối tượng [lớp, đối tượng, kế thừa, đóng gói, đa hình, v. v. ]. Do đó, các bài học sẽ không trình bày chi tiết các khái niệm cơ bản mà sẽ đi vào đặc trưng sử dụng của chúng trong Python
ĐỘI DUNG CỦA BẢN DỊCH Ẩn
1. Khai báo lớp trong Python
2. Sử dụng lớp
3. Các thành phần chính trong lớp Python
4. Trình xây dựng trong Python
5. Đặc điểm của thuộc tính và phương thức trong lớp Python
6. Kết luận
Khai báo class trong Python
Python là một ngôn ngữ lập trình hướng đối tượng hoàn toàn, nghĩa là mọi phần tử trong chương trình Python đều là đối tượng. Một số, một chuỗi, một danh sách, v. v. , mà bạn đã biết thực ra tất cả đều là đối tượng của một lớp xây dựng sẵn [int, float, str, list, v. v. ]. Một hàm [xây dựng sẵn hoặc do bạn tự xây dựng bằng từ khóa def] cũng là một đối tượng
Như vậy, khi làm việc với Python từ đầu khóa học đến giờ, trên thực tế là bạn đã trực tiếp sử dụng lớp và đối tượng. Định nghĩa lớp và đối tượng trong Python hoàn toàn tương tự như trong các ngôn ngữ lập trình khác
Python cho phép người thiết lập trình tự xây dựng lớp riêng của mình
Please start up with a ví dụ
Tạo mô-đun
from book import Book b1 = Book['Lập trình hướng đối tượng với Python', 'Nhật Linh', 'Tự học ICT', 2022, 2] b1.print[] b2 = Book[title = 'Nhập môn lập trình Python', authors= 'Nhật linh', publisher= 'Tự học ICT'] b2.print[] b3 = Book['A new book'] b3.print[]7và viết mã như sau
class Book: """A class for e-book""" def __init__[self, title: str, authors: str = '', publisher: str = '', year: int = 2020, edition: int = 1]: """Hàm tạo của class""" self.title = title self.authors = authors self.publisher = publisher self.year = year self.edition = edition def print[self]: """Print the book infor""" print[f"{self.title} by {self.authors}, {self.edition} edition, {self.publisher}, {self.year}"]
Đây là mã tạo một lớp mô tả sách, bao gồm các thông tin về tựa sách, tác giả, nhà xuất bản, năm xuất bản, lần tái bản
Lớp trong Python được khai báo với từ khóa lớp theo cấu trúc như sau
class tên_class: '''docstring''' # class suite
Lệnh khai báo lớp cũng là một lệnh phức hợp với 1 mệnh đề. Header bao gồm từ khóa class và tên lớp, phần suite bao gồm các lệnh khai báo các thành phần của lớp
Class name must pay thủ theo quy tắc set the general list of Python. Ngoài ra, tên lớp được đặt theo quy ước PascalCase [ghi hoa chữ cái đầu mỗi từ]. Lưu ý rằng, các lớp xây dựng sẵn của Python chỉ đặt lại tên viết thường
Ngay bên dưới tiêu đề là chuỗi tài liệu của lớp. Docstring cung cấp tài liệu hỗ trợ cho việc sử dụng lớp, tương tự như vai trò của docstring trong hàm. Chuỗi tài liệu thông thường của lớp đơn giản hơn vì chỉ mục đích lược sử sử dụng của lớp
Sau phần docstring là khai báo các thành phần khác của class. Lớp trong Python có nhiều thành phần khác nhau. Phần tiếp theo của bài học sẽ giới thiệu sơ lược về các thành phần này. Trong các bài học sau chúng ta sẽ lần lượt học cách làm việc với chúng ta
Use class
With class Book build as on, you can make object as after
from book import Book b1 = Book['Lập trình hướng đối tượng với Python', 'Nhật Linh', 'Tự học ICT', 2022, 2] b1.print[] b2 = Book[title = 'Nhập môn lập trình Python', authors= 'Nhật linh', publisher= 'Tự học ICT'] b2.print[] b3 = Book['A new book'] b3.print[]
Thấy rằng, lệnh tạo đối tượng không khác biệt gì so với lời gọi hàm thông thường
Như vậy, lệnh tạo đối tượng đơn giản nhất là sử dụng tên lớp và cặp dấu [], tương tự như một lời gọi hàm
Phụ thuộc vào hàm tạo của lớp, lời gọi lệnh tạo đối tượng có thể phức tạp hơn với nhiều tham số, giống như lời gọi hàm thông thường. Hàm tạo sẽ được trình bày chi tiết ở phần sau của bài học này
Bạn có thể xây dựng và sử dụng lớp trong cùng một mô-đun. Tuy nhiên, lớp thông thường nên được xây dựng trong mô-đun riêng
Nếu lớp được xây dựng trong một mô-đun/gói khác, bạn cần nhập nó trước khi sử dụng bằng một trong hai cách đã học
Ví dụ, nếu lớp Sách được xây dựng trong sách mô-đun, bạn có thể sử dụng
from book import Book b1 = Book['Lập trình hướng đối tượng với Python', 'Nhật Linh', 'Tự học ICT', 2022, 2] b1.print[] b2 = Book[title = 'Nhập môn lập trình Python', authors= 'Nhật linh', publisher= 'Tự học ICT'] b2.print[] b3 = Book['A new book'] b3.print[]8 hoặc
class tên_class: '''docstring''' # class suite0
from book import Book #hoặc import book
Nếu sử dụng
from book import Book b1 = Book['Lập trình hướng đối tượng với Python', 'Nhật Linh', 'Tự học ICT', 2022, 2] b1.print[] b2 = Book[title = 'Nhập môn lập trình Python', authors= 'Nhật linh', publisher= 'Tự học ICT'] b2.print[] b3 = Book['A new book'] b3.print[]8, bạn có thể sử dụng trực tiếp tên lớp Book
Khi sử dụng
class tên_class: '''docstring''' # class suite0, bạn phải sử dụng thêm tên mô-đun.
class tên_class: '''docstring''' # class suite3
Các thành phần chính trong lớp Python
Mặc dù bạn có thể khai báo một lớp hoàn toàn không chứa bất kỳ thành viên nào, lớp như vậy không có giá trị. Lớp trong Python thường chứa các thành phần sau
- Constructor [hàm tạo]
- Các thuộc tính [biến]
- The method [method]
- Các thuộc tính [thuộc tính]
Hàm tạo [constructor] là hàm được gọi trong quá trình tạo đối tượng của lớp. Khác với C# hay Java, hàm tạo trong Python không phải là hàm chạy đầu tiên khi tạo đối tượng, và cũng không phải là hàm chịu trách nhiệm tạo đối tượng. Hàm tạo trong Python có tác dụng tạo các đặc tính thành viên [thuộc tính thể hiện]. Chúng ta sẽ học cách làm việc với hàm tạo ở phần sau của bài học này
Thuộc tính [biến/đặc tính] là thành phần chứa dữ liệu trong lớp/đối tượng. Python phân biệt hai loại thuộc tính. thuộc tính thể hiện và thuộc tính lớp
Thuộc tính sơ thẩm là những biến chứa trạng thái của một đối tượng cụ thể và đặc trưng cho đối tượng. Trong Python, thuộc tính thể hiện được khai báo và gán giá trị khi tạo hàm
Thuộc tính lớp là những biến chứa giá trị đặc trưng cho cả lớp chứ không phải đặc trưng cho một đối tượng cụ thể. Thuộc tính lớp có cùng giá trị trong tất cả các đối tượng của lớp. Thuộc tính lớp có thể được sử dụng, ví dụ, để theo dõi số lượng đối tượng của lớp được tạo ra
Phương thức [method] là thành phần xử lý dữ liệu trong Python. Phương thức thực chất là các loại hàm khác nhau được khai báo trong lớp. Python phân biệt instance method, class method và static method
Phương thức sơ thẩm là các hàm xử lý trạng thái của đối tượng. Phương thức thể hiện gắn liền với đối tượng và sử dụng các thuộc tính thể hiện [dữ liệu gắn liền với từng đối tượng]
Phương thức lớp là các hàm xử lý thông tin của lớp và gắn liền với lớp. Phương thức lớp chuyên xử lý thuộc tính lớp
Phương thức tĩnh là loại phương thức đặc biệt không sử dụng bất kỳ thông tin gì của lớp hay đối tượng mặc dù nằm trong lớp
Các thành phần của lớp trong Python có nhiều điểm tương đồng với các ngôn ngữ như C# hay Java. Tuy nhiên, tên gọi trong Python có phần hơi khác. Thuộc tính sơ thẩm tương tự như biến thành viên trong C# hoặc Java. Thuộc tính lớp tương tự như biến thành viên tĩnh trong C#. Phương thức lớp và phương thức tĩnh tương tự như phương thức tĩnh trong C#.
Cách gọi tên trong Python rất hệ thống, phân biệt rõ ràng đặc trưng của thể hiện và đặc trưng của lớp.
Trong bài học này và một số bài học tiếp theo chúng ta sẽ xem xét ý nghĩa và cách xây dựng các thành viên của lớp Python
Constructor trong Python
Vui lòng xem lại hàm __init__[] mà chúng ta đã xây dựng trong ví dụ đầu tiên
def __init__[self, title: str, authors: str = '', publisher: str = '', year: int = 2020, edition: int = 1]: """Hàm tạo của class""" self.title = title self.authors = authors self.publisher = publisher self.year = year self.edition = edition self.__private = True Book.count += 1
__init__[] là một hàm đặc biệt trong Python. hàm tạo [hàm tạo]
Về mặt hình thức __init__[] hoàn toàn tương tự như một lệnh khai báo hàm trong Python. Hàm __init__[] ở trên nhận tham số tiêu đề, tác giả, nhà xuất bản, năm và ấn bản. Chúng ta cũng sử dụng kỹ thuật chỉ báo kiểu [gõ gợi ý] và cung cấp giá trị mặc định cho các tham số
Constructor trong Python bắt buộc phải có tên là
class tên_class: '''docstring''' # class suite4 và phải có ít nhất một tham số, thường đặt tên là
class tên_class: '''docstring''' # class suite5. Nếu có nhiều tham số, thì
class tên_class: '''docstring''' # class suite5 bắt buộc phải là tham số đầu tiên
Tham số name call
class tên_class: '''docstring''' # class suite5 was set by the rule of Python chứ không phải là bắt buộc. You can set any other names. The you are export must be point is C++ or C# normal has xu direction set is this
Trình tạo và Trình khởi tạo
Nói một cách chính xác,
class tên_class: '''docstring''' # class suite8 không phải là hàm tạo theo nghĩa đen của khái niệm này trong việc thiết lập hướng đối tượng. Hàm __init__[] là một hàm khởi tạo – hàm chịu trách nhiệm khởi tạo các giá trị cho đối tượng. Trình khởi tạo không chịu trách nhiệm khởi tạo đối tượng.
Trong Python, hàm __init__[] không chịu trách nhiệm tạo ra đối tượng của lớp. Python sử dụng một 'phương thức ma thuật' có tên gọi là __new__[] để tạo đối tượng của mỗi lớp.
Phương thức ma thuật là một số phương thức được Python tự động tạo ra cùng với lớp và được Python gọi là tự động Mục đích thực hiện những công việc đặc biệt.
__new__[] mới thực sự là hàm tạo của lớp Python.
Ví dụ, khi gặp lệnh tạo đối tượng
class tên_class: '''docstring''' # class suite9, Python sẽ tự động chạy hàm __new__[] đầu tiên. Kết quả của function __new__[] is object of class book. Sau đó Python continue auto run __init__[]. Đối tượng do __new__[] tạo ra được truyền sang cho __init__[] thông qua tham số đầu tiên [bản thân] trong danh sách.
Vì lý do này, bạn có thể đặt bất kỳ tên gì cho bản thân cũng được nhưng phải để nó ở đầu danh sách tham số.
Vai trò quan trọng hàng đầu của hàm tạo trong Python là tạo và gán giá trị cho thuộc tính thể hiện. Tất cả các tham số còn lại trong danh sách tham số của __init__[] cung cấp giá trị để tạo thuộc tính thể hiện cho đối tượng
Với hàm tạo như trên, bạn có thể tạo đối tượng của lớp Book bằng những cách sau
class tên_class: '''docstring''' # class suite4
Thấy rằng, lệnh tạo đối tượng bằng hàm tạo không khác biệt gì so với lời gọi hàm thông thường
Đặc điểm của thuộc tính và phương thức trong lớp Python
Thuộc tính và phương thức trong Python có điểm khác biệt với biến thành viên và phương thức trong ngôn ngữ C++/C#/Java
Please view ví dụ sau
class tên_class: '''docstring''' # class suite5
Bạn có thể thấy rất nhiều điều lạ ở đây. Dễ thấy nhất là Class Book hoàn toàn trống rỗng. Trong lớp này chỉ có mỗi chuỗi tài liệu. Tuy nhiên, sau khi tạo đối tượng b, bạn lại có thể sử dụng phép toán truy xuất phần tử [ký hiệu dấu chấm]
from book import Book b1 = Book['Lập trình hướng đối tượng với Python', 'Nhật Linh', 'Tự học ICT', 2022, 2] b1.print[] b2 = Book[title = 'Nhập môn lập trình Python', authors= 'Nhật linh', publisher= 'Tự học ICT'] b2.print[] b3 = Book['A new book'] b3.print[]0,
from book import Book b1 = Book['Lập trình hướng đối tượng với Python', 'Nhật Linh', 'Tự học ICT', 2022, 2] b1.print[] b2 = Book[title = 'Nhập môn lập trình Python', authors= 'Nhật linh', publisher= 'Tự học ICT'] b2.print[] b3 = Book['A new book'] b3.print[]1,
from book import Book b1 = Book['Lập trình hướng đối tượng với Python', 'Nhật Linh', 'Tự học ICT', 2022, 2] b1.print[] b2 = Book[title = 'Nhập môn lập trình Python', authors= 'Nhật linh', publisher= 'Tự học ICT'] b2.print[] b3 = Book['A new book'] b3.print[]2, gán giá trị cho chúng và sau đó sử dụng lại chúng trong hàm print[]. Rõ ràng bạn không hề sáng tạo tựa sách, tác giả hay năm trong sách báo
Khi bạn tạo đối tượng b2 và thử truy xuất tiêu đề giá trị [b2. title] thì lại gặp lỗi “không tìm thấy thuộc tính title trong đối tượng b2”
tiêu đề, tác giả, năm được gọi là những thuộc tính của đối tượng b [nhưng không phải là thuộc tính của b2]
Như vậy, trong Python, thuộc tính là những biến có thể chứa các giá trị đặc trưng cho một đối tượng. Nó được tạo hoàn toàn độc lập với lớp khai báo [không cần chỉ định trong lớp khai báo]. Một cách chính xác hơn, biến này được gọi là thuộc tính thể hiện [liên quan đến đối tượng]
Giờ hãy xem một ví dụ khác
class tên_class: '''docstring''' # class suite9
Trong ví dụ này
- Chúng ta khai báo một lớp trống Người. Trong lớp này không có bất kỳ thành viên nào
- Tiếp theo chúng ta tạo đối tượng
from book import Book b1 = Book['Lập trình hướng đối tượng với Python', 'Nhật Linh', 'Tự học ICT', 2022, 2] b1.print[] b2 = Book[title = 'Nhập môn lập trình Python', authors= 'Nhật linh', publisher= 'Tự học ICT'] b2.print[] b3 = Book['A new book'] b3.print[]
3 của lớp Người - Chúng ta tuyên bố một chức năng độc lập
from book import Book b1 = Book['Lập trình hướng đối tượng với Python', 'Nhật Linh', 'Tự học ICT', 2022, 2] b1.print[] b2 = Book[title = 'Nhập môn lập trình Python', authors= 'Nhật linh', publisher= 'Tự học ICT'] b2.print[] b3 = Book['A new book'] b3.print[]
4 có thể đưa vào dòng thông báo - Điểm đặc biệt là mệnh lệnh
from book import Book b1 = Book['Lập trình hướng đối tượng với Python', 'Nhật Linh', 'Tự học ICT', 2022, 2] b1.print[] b2 = Book[title = 'Nhập môn lập trình Python', authors= 'Nhật linh', publisher= 'Tự học ICT'] b2.print[] b3 = Book['A new book'] b3.print[]
5. Đây là lệnh tạo ra một phương thức [phương thức] trong đối tượng putin và gán cho nó hàm hello[]. Tức là chúng ta ‘gán ghép’from book import Book b1 = Book['Lập trình hướng đối tượng với Python', 'Nhật Linh', 'Tự học ICT', 2022, 2] b1.print[] b2 = Book[title = 'Nhập môn lập trình Python', authors= 'Nhật linh', publisher= 'Tự học ICT'] b2.print[] b3 = Book['A new book'] b3.print[]
4 vớifrom book import Book b1 = Book['Lập trình hướng đối tượng với Python', 'Nhật Linh', 'Tự học ICT', 2022, 2] b1.print[] b2 = Book[title = 'Nhập môn lập trình Python', authors= 'Nhật linh', publisher= 'Tự học ICT'] b2.print[] b3 = Book['A new book'] b3.print[]
7 củafrom book import Book b1 = Book['Lập trình hướng đối tượng với Python', 'Nhật Linh', 'Tự học ICT', 2022, 2] b1.print[] b2 = Book[title = 'Nhập môn lập trình Python', authors= 'Nhật linh', publisher= 'Tự học ICT'] b2.print[] b3 = Book['A new book'] b3.print[]
3 - Sau đó, bạn có thể sử dụng lời chào theo phương thức/mô thức từ đối tượng
from book import Book b1 = Book['Lập trình hướng đối tượng với Python', 'Nhật Linh', 'Tự học ICT', 2022, 2] b1.print[] b2 = Book[title = 'Nhập môn lập trình Python', authors= 'Nhật linh', publisher= 'Tự học ICT'] b2.print[] b3 = Book['A new book'] b3.print[]
3 nhưng với tên gọi mới say_hello. Hàm say_hello[] được gọi là một phương thức của putin - Tuy nhiên, nếu bạn tạo đối tượng trump từ lớp Người, đối tượng này lại không có phương thức say_hello
Như vậy, giống như thuộc tính, phương thức trong lớp Python cũng không bắt buộc phải khai báo trong lớp thân. Phương thức độc lập với lớp và đối tượng