Khai Báo Phương Thức (Method) Và Thuộc Tính (Attribute) Trong Python

Tạo bởi Hoàng Vũ, chỉnh sửa cuối lúc 2 tháng 2, 2025

Trong lập trình hướng đối tượng (OOP) với Python, thuộc tính (attribute)phương thức (method) là hai thành phần quan trọng để quản lý dữ liệu và hành vi của đối tượng.

1. Thuộc Tính (Attribute) Là Gì?

Định Nghĩa

Thuộc tính là các biến bên trong một lớp, dùng để lưu trữ thông tin về đối tượng.
Có hai loại thuộc tính:

  • Thuộc tính của đối tượng (Instance Attribute): Mỗi đối tượng có giá trị riêng.
  • Thuộc tính của lớp (Class Attribute): Dùng chung cho tất cả các đối tượng.

Khai Báo Thuộc Tính Của Đối Tượng

Thuộc tính thường được khai báo trong phương thức __init__(), sử dụng từ khóa self:

class Nguoi:
    def __init__(self, ten, tuoi):
        self.ten = ten  # Thuộc tính của đối tượng
        self.tuoi = tuoi

# Tạo đối tượng
nguoi1 = Nguoi("An", 25)
nguoi2 = Nguoi("Bình", 30)

# Truy cập thuộc tính
print(nguoi1.ten)  # Kết quả: An
print(nguoi2.tuoi)  # Kết quả: 30

Mỗi đối tượng có giá trị riêng cho tentuoi.

Khai Báo Thuộc Tính Của Lớp

Thuộc tính của lớp được khai báo bên ngoài __init__() và dùng chung cho tất cả các đối tượng:

class HocSinh:
    truong = "THPT Quốc Gia"  # Thuộc tính của lớp

    def __init__(self, ten, lop):
        self.ten = ten
        self.lop = lop

# Tạo đối tượng
hs1 = HocSinh("Nam", "10A1")
hs2 = HocSinh("Lan", "11B2")

# Truy cập thuộc tính
print(hs1.truong)  # Kết quả: THPT Quốc Gia
print(hs2.truong)  # Kết quả: THPT Quốc Gia

Thuộc tính truong được chia sẻ bởi tất cả các đối tượng.

2. Phương Thức (Method) Là Gì?

Định Nghĩa

Phương thức là hàm bên trong lớp, giúp thao tác với thuộc tính của đối tượng.
Có 3 loại phương thức trong Python:

  • Phương thức của đối tượng (Instance Method)
  • Phương thức của lớp (Class Method)
  • Phương thức tĩnh (Static Method)

Phương Thức Của Đối Tượng (Instance Method)

Phương thức này thao tác với thuộc tính của đối tượng.

class Nguoi:
    def __init__(self, ten, tuoi):
        self.ten = ten
        self.tuoi = tuoi

    def gioi_thieu(self):
        print(f"Tôi tên là {self.ten}, năm nay {self.tuoi} tuổi.")

# Tạo đối tượng
nguoi1 = Nguoi("An", 25)
nguoi1.gioi_thieu()  # Kết quả: Tôi tên là An, năm nay 25 tuổi.

Phương thức gioi_thieu() sử dụng self.tenself.tuoi để in thông tin.

Phương Thức Của Lớp (Class Method)

Phương thức này thao tác với thuộc tính của lớp, không cần truy cập từng đối tượng.
Sử dụng decorator @classmethod:

class HocSinh:
    truong = "THPT Quốc Gia"

    def __init__(self, ten):
        self.ten = ten

    @classmethod
    def doi_ten_truong(cls, ten_moi):
        cls.truong = ten_moi  # Thay đổi thuộc tính của lớp

# Gọi phương thức của lớp
HocSinh.doi_ten_truong("THPT Nguyễn Huệ")
print(HocSinh.truong)  # Kết quả: THPT Nguyễn Huệ

Phương Thức Tĩnh (Static Method)

Phương thức tĩnh không liên quan đến cả đối tượng lẫn lớp.
Dùng khi không cần truy cập self hoặc cls, chỉ thực hiện tác vụ chung.

class ToanHoc:
    @staticmethod
    def tinh_tong(a, b):
        return a + b

# Gọi phương thức tĩnh
print(ToanHoc.tinh_tong(5, 10))  # Kết quả: 15

3. Ví Dụ Thực Tế: Lớp Car

class Car:
    # Thuộc tính của lớp
    so_banh = 4

    def __init__(self, hang, mau):
        self.hang = hang  # Thuộc tính của đối tượng
        self.mau = mau

    # Phương thức của đối tượng
    def mo_ta(self):
        print(f"Xe {self.hang} màu {self.mau}")

    # Phương thức của lớp
    @classmethod
    def doi_so_banh(cls, so_moi):
        cls.so_banh = so_moi

    # Phương thức tĩnh
    @staticmethod
    def kiem_tra_toc_do(toc_do):
        return toc_do > 100

# Tạo đối tượng
car1 = Car("Toyota", "Đỏ")
car2 = Car("Honda", "Xanh")

# Gọi phương thức đối tượng
car1.mo_ta()  # Xe Toyota màu Đỏ

# Gọi phương thức của lớp
Car.doi_so_banh(6)
print(Car.so_banh)  # Kết quả: 6

# Gọi phương thức tĩnh
print(Car.kiem_tra_toc_do(120))  # Kết quả: True

4. Tổng Kết

Thành phần Giải thích Ví dụ
Thuộc tính của đối tượng Biến thuộc về mỗi đối tượng, lưu trữ dữ liệu riêng self.ten, self.tuoi
Thuộc tính của lớp Biến dùng chung cho tất cả các đối tượng cls.truong
Phương thức của đối tượng Hàm thao tác với thuộc tính của từng đối tượng def hien_thi(self)
Phương thức của lớp Hàm thao tác với thuộc tính chung của lớp @classmethod def doi_ten_truong(cls, ten_moi)
Phương thức tĩnh Hàm không liên quan đến lớp hay đối tượng @staticmethod def kiem_tra_toc_do(toc_do)

Việc hiểu rõ thuộc tính và phương thức giúp bạn lập trình hướng đối tượng hiệu quả hơn trong Python.

Website Logo

Với hơn 10 năm kinh nghiệm lập trình web và từng làm việc với nhiều framework, ngôn ngữ như PHP, JavaScript, React, jQuery, CSS, HTML, CakePHP, Laravel..., tôi hy vọng những kiến thức được chia sẻ tại đây sẽ hữu ích và thiết thực cho các bạn.

Bình luận

Website Logo

Chào, tôi là Vũ. Đây là blog hướng dẫn lập trình của tôi.

Liên hệ công việc qua email dưới đây.

lhvuctu@gmail.com

Chúng Tôi Trên

Bạn đang muốn học về lập trình website?

Bạn cần nâng cao kiến thức chuyên nghiệp hơn để nâng cao cơ hội nghề nghiệp? Liên hệ