Menu
CoddyTech

Biến của instance và biến của lớp

Thuộc phần Lập trình hướng đối tượng trong hành trình Python của Coddy. Bài học 13 trên 64.

Biến thực thể (instance variable) là duy nhất với mỗi đối tượng, còn biến lớp (class variable) được mọi đối tượng thuộc cùng một lớp chia sẻ.

Đây là ví dụ về một lớp có cả hai loại biến

class Student:
    # Biến lớp (class variable): dùng chung cho mọi instance
    school = "Python High School"
    
    def __init__(self, name, grade):
        # Biến instance: riêng của từng học sinh
        self.name = name
        self.grade = grade

Tạo các đối tượng học sinh:

alice = Student("Alice", "A")
bob = Student("Bob", "B")

Truy cập các biến instance (riêng biệt với từng đối tượng):

print(alice.name)  # Alice
print(bob.name)    # Bob
print(alice.grade) # A
print(bob.grade)   # B

Truy cập các biến lớp (được chia sẻ bởi tất cả đối tượng):

print(alice.school)     # Python High School
print(bob.school)       # Python High School
print(Student.school)   # Python High School

Bây giờ hãy thay đổi biến lớp:

Student.school = "Python Academy"

Kiểm tra xem thay đổi ảnh hưởng thế nào đến tất cả các đối tượng:

print(alice.school)   # Python Academy
print(bob.school)     # Python Academy

Đầu ra:

Alice
Bob
A
B
Python High School
Python High School
Python High School
Python Academy
Python Academy

Bạn cũng có thể tạo biến thực thể (instance variable) sau khi tạo đối tượng:

alice.age = 16  # Lệnh này tạo một biến (variable) của instance
print(alice.age)  # 16
# print(bob.age)  # Lệnh này sẽ gây lỗi vì bob không có thuộc tính age

Khác biệt chính: Biến thực thể (instance variable), được tạo bằng self.variable_name, là riêng cho từng đối tượng, còn biến lớp (class variable), được định nghĩa trực tiếp trong lớp, thì được mọi đối tượng dùng chung. Thay đổi biến lớp sẽ ảnh hưởng đến mọi instance.

challenge icon

Thử thách

Dễ

Hoàn thành hệ thống ngân hàng. Bạn sẽ định nghĩa một lớp BankAccount trong một tệp và sử dụng lớp đó trong một tệp khác.

Bạn sẽ làm việc với:

  • bank_account.py: Định nghĩa lớp BankAccount với các thuộc tính và phương thức
  • driver.py: Nhập lớp, tạo các tài khoản và minh họa biến lớp

Làm theo các chú thích TODO trong cả hai tệp để thực hiện từng bước. Các chú thích sẽ hướng dẫn bạn tạo lớp với các biến và phương thức phù hợp, đồng thời cho thấy biến lớp ảnh hưởng đến tất cả các đối tượng như thế nào.

Tự làm thử

# TODO: Nhập lớp (class) BankAccount từ bank_account.py
from bank_account import BankAccount

# TODO: Tạo hai tài khoản với thông tin chính xác sau:
# - account1: chủ tài khoản "Alice Smith", số dư $1000
# - account2: chủ tài khoản "Bob Jones", số dư $2000

# TODO: Gọi display_info() cho cả hai tài khoản

# TODO: Đổi biến (variable) lớp interest_rate thành 0.03 (3%)
# Dùng định dạng này: BankAccount.interest_rate = 0.03

# TODO: In ra chuỗi (string) "After interest rate change:"

# TODO: Gọi lại display_info() cho cả hai tài khoản để cho thấy cả hai đều có lãi suất mới
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch Python online