Lớp python với các loại

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 suite
0

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 suite
0, bạn phải sử dụng thêm tên mô-đun.
class tên_class:
    '''docstring'''
    # class suite
3

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 suite
4 và phải có ít nhất một tham số, thường đặt tên là
class tên_class:
    '''docstring'''
    # class suite
5. Nếu có nhiều tham số, thì
class tên_class:
    '''docstring'''
    # class suite
5 bắt buộc phải là tham số đầu tiên

Tham số name call

class tên_class:
    '''docstring'''
    # class suite
5 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 suite
8 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 suite
9, 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 suite
4

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 suite
5

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 suite
9

Trong ví dụ này

  1. 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
  2. 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
  3. 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
  4. Đ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ới
    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[]
    7 của
    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
  5. 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
  6. 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

Chủ Đề