Select Page

Tạo Đối Tượng Python: Hướng Dẫn Chi Tiết

Bài viết này sẽ hướng dẫn bạn cách tạo và sử dụng đối tượng trong lập trình Python. Bạn sẽ tìm hiểu về khái niệm đối tượng, cách tạo đối tượng, và cách sử dụng các phương thức của đối tượng. Hãy bắt đầu hành trình khám phá thế giới lập trình hướng đối tượng với Python ngay bây giờ!


Khái niệm về Đối tượng trong Python

Trong thế giới lập trình, có hai trường phái chính: lập trình thủ tục và lập trình hướng đối tượng (OOP). Lập trình thủ tục, như tên gọi, tập trung vào việc viết các thủ tục hoặc hàm để thực hiện các tác vụ cụ thể. Ngược lại, lập trình hướng đối tượng tập trung vào việc tạo ra các đối tượng, mỗi đối tượng là một thực thể độc lập có các thuộc tính và hành vi riêng. Python, một ngôn ngữ đa năng, hỗ trợ mạnh mẽ cả hai phong cách này, nhưng nổi bật hơn với khả năng lập trình hướng đối tượng.

Vậy, đối tượng trong lập trình là gì? Hãy tưởng tượng một thế giới thực, nơi mọi thứ xung quanh bạn đều là các đối tượng: một chiếc xe, một cuốn sách, một con người. Mỗi đối tượng này đều có những đặc điểm riêng (thuộc tính) và khả năng thực hiện các hành động (phương thức). Trong lập trình hướng đối tượng, chúng ta cố gắng mô phỏng thế giới thực này bằng cách tạo ra các đối tượng tương ứng.

Sự khác biệt cốt lõi giữa lập trình thủ tục và lập trình hướng đối tượng nằm ở cách chúng ta tổ chức và tương tác với dữ liệu. Trong lập trình thủ tục, dữ liệu và các hàm xử lý dữ liệu được tách biệt. Điều này có thể dẫn đến mã nguồn khó quản lý và bảo trì khi dự án trở nên phức tạp. Trong khi đó, lập trình hướng đối tượng kết hợp dữ liệu (thuộc tính) và các thao tác trên dữ liệu (phương thức) vào trong một đối tượng duy nhất. Điều này giúp mã nguồn trở nên có cấu trúc hơn, dễ hiểu hơn và dễ bảo trì hơn.

Để hiểu rõ hơn, chúng ta hãy xem xét một ví dụ đơn giản về một đối tượng trong Python. Giả sử chúng ta muốn tạo một đối tượng đại diện cho một người. Trong lập trình thủ tục, chúng ta có thể lưu thông tin của người đó trong các biến riêng biệt, ví dụ: tên, tuổi, địa chỉ. Tuy nhiên, trong lập trình hướng đối tượng, chúng ta sẽ tạo ra một đối tượng “Người” (Person) chứa tất cả thông tin này. Đối tượng “Người” này có thể có các thuộc tính như: tên, tuổi, địa chỉ, và các phương thức (hành động) như: nói, đi, ăn.

Ví dụ cụ thể bằng Python:


class Person:
    def __init__(self, name, age, address):
        self.name = name
        self.age = age
        self.address = address

    def say_hello(self):
        print(f"Xin chào, tôi là {self.name}")

    def introduce(self):
        print(f"Tôi là {self.name}, {self.age} tuổi, đến từ {self.address}")

# Tạo đối tượng
person1 = Person("Alice", 30, "123 Main St")
person2 = Person("Bob", 25, "456 Oak Ave")

# Gọi phương thức của đối tượng
person1.say_hello()
person2.introduce()

Trong đoạn code trên, chúng ta đã định nghĩa một lớp (class) Person, đây là bản thiết kế cho các đối tượng Person. Hàm __init__ là một phương thức đặc biệt, được gọi là hàm khởi tạo, dùng để tạo ra các đối tượng Person. Mỗi đối tượng Person có các thuộc tính riêng (name, age, address) và các phương thức (say_hello, introduce). Khi chúng ta tạo đối tượng person1 và person2, chúng ta đã tạo ra hai thực thể riêng biệt của lớp Person, mỗi thực thể có các thuộc tính và phương thức riêng.

Như vậy, Object trong lập trình Python chính là các thực thể được tạo ra từ một lớp, chúng mang trong mình cả dữ liệu (thuộc tính) và các hành động (phương thức) liên quan đến dữ liệu đó. Việc tạo đối tượng cho phép chúng ta tổ chức code một cách có cấu trúc, dễ dàng tái sử dụng và mở rộng. Khái niệm này là nền tảng cho việc xây dựng các ứng dụng phức tạp và mạnh mẽ trong Python.

Để hiểu sâu hơn về cách tạo đối tượng trong Python, chương tiếp theo sẽ đi vào chi tiết cách sử dụng lớp (class) để định nghĩa các đối tượng, cũng như cách định nghĩa và sử dụng các thuộc tính cho đối tượng. Chúng ta sẽ cùng nhau khám phá cách Tạo Đối tượng và Thuộc Tính một cách chi tiết và dễ hiểu.

Chương: Tạo Đối tượng và Thuộc Tính

Tiếp nối chương trước, “Khái niệm về Đối tượng trong Python”, nơi chúng ta đã khám phá sự khác biệt giữa lập trình thủ tục và lập trình hướng đối tượng, cũng như làm quen với khái niệm cơ bản về đối tượng, chương này sẽ đi sâu vào việc tạo đối tượng trong Python một cách chi tiết. Chúng ta sẽ tìm hiểu cách sử dụng lớp (class) để tạo ra các đối tượng và định nghĩa các thuộc tính (attribute) cho chúng.

Trong lập trình hướng đối tượng, Object trong lập trình Python là một thực thể cụ thể của một lớp. Lớp có thể được coi là một bản thiết kế hoặc khuôn mẫu để tạo ra các đối tượng. Để tạo đối tượng, chúng ta cần định nghĩa một lớp trước. Cú pháp cơ bản để định nghĩa một lớp trong Python như sau:

class TenLop:
    # Các thuộc tính và phương thức
    pass

Trong đó, class là từ khóa để khai báo lớp, TenLop là tên của lớp (nên đặt theo quy tắc CamelCase), và pass là một lệnh trống (có thể bỏ qua nếu có nội dung khác). Sau khi định nghĩa lớp, chúng ta có thể tạo ra các đối tượng (instance) từ lớp đó.

Để minh họa, chúng ta sẽ tạo một lớp đại diện cho một sản phẩm. Lớp này sẽ có các thuộc tính như tên sản phẩm, giá và số lượng. Chúng ta sẽ định nghĩa lớp SanPham như sau:

class SanPham:
    def __init__(self, ten, gia, so_luong):
        self.ten = ten
        self.gia = gia
        self.so_luong = so_luong

Ở đây, __init__ là một phương thức đặc biệt, được gọi là phương thức khởi tạo (constructor). Phương thức này được tự động gọi khi chúng ta tạo một đối tượng mới từ lớp. Các tham số của __init__, bao gồm self, ten, giaso_luong, được sử dụng để khởi tạo các thuộc tính của đối tượng. self là tham chiếu đến chính đối tượng đang được tạo. ten, giaso_luong là các thuộc tính của đối tượng.

Để tạo đối tượng từ lớp SanPham, chúng ta sử dụng cú pháp sau:

san_pham_1 = SanPham("Laptop", 1500, 10)
san_pham_2 = SanPham("Chuột", 25, 50)

Ở đây, san_pham_1san_pham_2 là hai đối tượng khác nhau của lớp SanPham. Mỗi đối tượng có các thuộc tính riêng biệt, được khởi tạo bằng các giá trị tương ứng. Ví dụ, san_pham_1 có tên là “Laptop”, giá 1500 và số lượng 10, trong khi san_pham_2 có tên là “Chuột”, giá 25 và số lượng 50.

Để truy xuất giá trị của các thuộc tính, chúng ta sử dụng cú pháp dấu chấm (.) theo sau tên đối tượng và tên thuộc tính:

print(san_pham_1.ten)  # Output: Laptop
print(san_pham_2.gia)  # Output: 25

Để cập nhật giá trị của các thuộc tính, chúng ta cũng sử dụng cú pháp dấu chấm và gán giá trị mới:

san_pham_1.gia = 1600
san_pham_2.so_luong = 60
print(san_pham_1.gia)  # Output: 1600
print(san_pham_2.so_luong) # Output: 60

Như vậy, chúng ta đã thấy cách tạo đối tượng từ một lớp, định nghĩa các thuộc tính cho đối tượng và truy xuất, cập nhật giá trị của các thuộc tính. Điều này cho phép chúng ta tạo ra các đối tượng khác nhau, mỗi đối tượng mang một trạng thái riêng biệt. Các thuộc tính này đóng vai trò quan trọng trong việc lưu trữ dữ liệu liên quan đến đối tượng.

Việc sử dụng lớp và đối tượng giúp chúng ta tổ chức mã nguồn một cách rõ ràng hơn, dễ bảo trì và tái sử dụng. Thay vì phải viết mã lặp đi lặp lại cho từng sản phẩm, chúng ta chỉ cần định nghĩa một lớp SanPham và tạo ra các đối tượng từ lớp này. Đây là một trong những lợi ích quan trọng của lập trình hướng đối tượng.

Trong chương này, chúng ta đã nắm vững cách tạo đối tượng và định nghĩa các thuộc tính. Bước tiếp theo, chúng ta sẽ tìm hiểu về phương thức, một khái niệm quan trọng khác trong lập trình hướng đối tượng. Chương sau, “Phương thức và Hành Vi của Đối tượng”, sẽ giúp chúng ta hiểu rõ hơn về cách sử dụng phương thức để mô tả hành vi của đối tượng và làm cho các đối tượng trở nên linh hoạt và mạnh mẽ hơn.

Phương thức và Hành Vi của Đối tượng

Tiếp nối từ chương trước, nơi chúng ta đã khám phá cách tạo đối tượng và thuộc tính trong Python, chương này sẽ tập trung vào phương thức, một thành phần quan trọng khác của Object trong lập trình Python. Phương thức không chỉ đơn thuần là dữ liệu; chúng là những hành động mà đối tượng có thể thực hiện, mang lại tính tương tác và động cho các đối tượng mà chúng ta tạo ra.

Khái niệm Phương thức trong Python

Trong Python, một phương thức (method) là một hàm được định nghĩa bên trong một lớp (class). Nó được liên kết với đối tượng cụ thể của lớp đó và có thể truy cập đến các thuộc tính của đối tượng đó. Nói một cách đơn giản, phương thức định nghĩa hành vi của đối tượng. Ví dụ, nếu chúng ta có một lớp “Sản phẩm”, thì các hành vi như “tính toán giá giảm” hoặc “hiển thị thông tin sản phẩm” sẽ được thể hiện qua các phương thức.

Định nghĩa Phương thức

Để định nghĩa một phương thức trong Python, chúng ta thực hiện như sau:

class SanPham:
    def __init__(self, ten, gia, so_luong):
        self.ten = ten
        self.gia = gia
        self.so_luong = so_luong

    def tinh_gia_giam(self, phan_tram_giam):
        gia_giam = self.gia * (1 - phan_tram_giam)
        return gia_giam

Trong ví dụ trên, `tinh_gia_giam` là một phương thức của lớp `SanPham`. Lưu ý rằng phương thức đầu tiên của mỗi lớp thường là `__init__`, đây là phương thức khởi tạo, được gọi khi một đối tượng của lớp được tạo ra.

Cách Sử Dụng Phương Thức

Để sử dụng một phương thức, chúng ta cần tạo một đối tượng từ lớp và sau đó gọi phương thức trên đối tượng đó. Ví dụ:

san_pham_1 = SanPham("Điện thoại", 1000, 10)
gia_sau_giam = san_pham_1.tinh_gia_giam(0.2)
print(f"Giá sau khi giảm 20%: {gia_sau_giam}")

Ở đây, `san_pham_1` là một đối tượng của lớp `SanPham`. Chúng ta gọi phương thức `tinh_gia_giam` trên `san_pham_1` và truyền vào tham số `0.2` (tức là giảm 20%).

Ví Dụ Chi Tiết: Phương Thức Tính Toán Giá Giảm

Chúng ta sẽ tiếp tục với ví dụ về lớp `SanPham` từ chương trước. Giả sử chúng ta muốn thêm một phương thức để tính toán giá sau khi giảm giá. Chúng ta có thể làm như sau:

class SanPham:
    def __init__(self, ten, gia, so_luong):
        self.ten = ten
        self.gia = gia
        self.so_luong = so_luong

    def tinh_gia_giam(self, phan_tram_giam):
        gia_giam = self.gia * (1 - phan_tram_giam)
        return gia_giam

    def hien_thi_thong_tin(self):
        print(f"Tên sản phẩm: {self.ten}")
        print(f"Giá sản phẩm: {self.gia}")
        print(f"Số lượng sản phẩm: {self.so_luong}")

Trong ví dụ này, chúng ta đã thêm phương thức `tinh_gia_giam` để tính toán giá sau khi giảm giá theo phần trăm. Phương thức này nhận tham số `phan_tram_giam` và trả về giá đã giảm. Chúng ta cũng thêm phương thức `hien_thi_thong_tin` để in ra thông tin sản phẩm.

Cách Gọi và Truyền Tham Số cho Phương Thức

  • Gọi Phương Thức: Chúng ta gọi phương thức bằng cách sử dụng dấu chấm (`.`) sau tên đối tượng, theo sau là tên phương thức và dấu ngoặc đơn `()`. Nếu phương thức có tham số, chúng ta truyền các tham số bên trong dấu ngoặc đơn. Ví dụ: `san_pham_1.tinh_gia_giam(0.2)`.
  • Truyền Tham Số: Khi gọi một phương thức, chúng ta có thể truyền các tham số vào phương thức đó. Các tham số này được sử dụng để thực hiện các hành động cụ thể của phương thức. Trong ví dụ trên, `0.2` là tham số được truyền vào phương thức `tinh_gia_giam`.

Vai Trò của `self`

Trong Python, tham số đầu tiên của mọi phương thức trong lớp phải là `self`. `self` là một tham chiếu đến đối tượng hiện tại mà phương thức đang được gọi. Nó cho phép phương thức truy cập đến các thuộc tính của đối tượng đó. Khi chúng ta gọi một phương thức, Python tự động truyền đối tượng gọi phương thức vào tham số `self`. Vì vậy, khi chúng ta viết `self.gia`, chúng ta đang truy cập đến thuộc tính `gia` của đối tượng đang được sử dụng.

Phương thức là một yếu tố không thể thiếu trong lập trình hướng đối tượng, giúp chúng ta định nghĩa hành vi của đối tượng và tương tác với dữ liệu của chúng. Việc hiểu rõ cách định nghĩa và sử dụng phương thức là rất quan trọng để tạo đối tượng và xây dựng các ứng dụng phức tạp trong Python. Chúng ta đã cùng nhau tìm hiểu cách tạo đối tượng và các phương thức đi kèm, chương tiếp theo sẽ đi sâu hơn vào các khái niệm nâng cao hơn liên quan đến lập trình hướng đối tượng.

Conclusions

Bài viết đã cung cấp cho bạn một cái nhìn tổng quan về đối tượng trong Python. Hy vọng bài viết này giúp bạn hiểu rõ hơn về lập trình hướng đối tượng và áp dụng hiệu quả trong các dự án của mình. Hãy tiếp tục khám phá và phát triển kỹ năng lập trình Python của bạn!