Skip to main content

Bài 021 - Class Attribute vs Instance Attribute

Class Attribute (thuộc tính lớp)

  • Dùng chung cho mọi đối tượng.
  • Khai báo ngoài __init__.
  • Chỉ có một bản sao duy nhất trong bộ nhớ.

Instance Attribute (thuộc tính đối tượng)

  • Riêng biệt cho từng đối tượng.
  • Khai báo trong __init__ hoặc phương thức.
  • Mỗi object giữ một bản sao riêng.

Ví dụ minh họa:

class Employee:
company_name = "TechCorp" # Class attribute

def __init__(self, emp_id):
self.emp_id = emp_id # Instance attribute

e1 = Employee(101)
e2 = Employee(102)

print(e1.company_name) # 👉 TechCorp
print(e2.emp_id) # 👉 102

4. Thay đổi thuộc tính lớp

Employee.company_name = "TechGlobal"

print(e1.company_name) # 👉 TechGlobal
print(e2.company_name) # 👉 TechGlobal

→ Tất cả đối tượng đều thấy thay đổi vì cùng trỏ đến company_name trong lớp.


5. Thêm thuộc tính sau khi tạo

e1.ten = "An"
e2.chuc_vu = "Giám đốc"
Employee.tru_so = "Hà Nội"

print(e1.ten) # 👉 An
print(e2.chuc_vu) # 👉 Giám đốc
print(e1.tru_so) # 👉 Hà Nội

→ Python cho phép thêm thuộc tính vào đối tượng hoặc lớp bất kỳ lúc nào.


6. Khi tên thuộc tính trùng nhau

class Employee:
dia_chi = "Hà Nội"

e = Employee(101)
e.dia_chi = "TP.HCM"

print(Employee.dia_chi) # 👉 Hà Nội
print(e.dia_chi) # 👉 TP.HCM

→ Nếu trùng tên, thuộc tính của đối tượng ưu tiên hơn.


Tổng kết nhanh

Khái niệmĐặc điểm chính
ClassKhuôn mẫu định nghĩa thuộc tính & hành vi
ObjectMột thực thể cụ thể của class
Instance AttributeDữ liệu riêng biệt của mỗi object
Class AttributeDữ liệu dùng chung cho tất cả object
selfĐại diện cho đối tượng hiện tại trong class
__init__Hàm khởi tạo được gọi khi object được tạo

Gợi ý áp dụng

  • Dùng class attribute cho thông tin chung: tên công ty, địa chỉ...
  • Dùng instance attribute cho thông tin cá nhân: mã nhân viên, tên, chức vụ...

👉 Tiếp theo: Bạn sẽ học về các loại phương thức trong lớp: instance method, class method, static method và cách sử dụng decorator như @classmethod.