Class variable (biến thuộc về lớp) hoặc static variable (biến tĩnh) đều là các biến được chia sẻ cho tất cả các đối tượng của lớp. Còn Instance variable (biến thuộc về thể hiện của lớp) hoặc non-static variable (biến không tĩnh) thì là khác nhau giữa các đối tượng khác nhau (mỗi đối tượng đều có một bản sao của các instance variable và non-static variable của lớp).

 Ví dụ, giả sử ta có một Computer Science Student (sinh viên ngành khoa học máy tính) thuộc lớp CSStudent. Lớp này có thể có một biến tĩnh mang giá trị “cse” cho tất cả các đối tượng. Và lớp này cũng có thể có các biến thành viên không tĩnh như là name và roll.

Trong C++Java, chúng ta có thể sử dụng từ khóa static để làm cho một biến bình thường trở thành một class variable (biến thuộc về class). Những biến mà không có  từ khóa static đặt ở trước thì đều là các instance variable (tức là biến thuộc về đối tượng/thể hiện của lớp đó). 

 Cách tiếp cận trong Python thì tương đối đơn giản, nó không yêu cầu từ khóa static. Những biến mà được gán cho một giá trị ở bên trong phần code khai báo của lớp thì đều là class variable – biến thuộc về lớp. Và những biến mà được gán cho các giá trị ở bên trong các phương thức thì đều là instance variable – biến thuộc về thể hiện/đối tượng của lớp.

Ví dụ mô tả những biến được gán cho một giá trị ở bên trong phần code khai báo của lớp thì đều là class variable – biến thuộc về lớp:

# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: cafedevn@gmail.com
#Fanpage: https://www.facebook.com/cafedevn
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
# -----------------------------------------------------------


# Python program to show that the variables with a value  
# assigned in class declaration, are class variables 
  
# Class for Computer Science Student 
class CSStudent: 
    stream = 'cse'                  # Class Variable 
    def __init__(self,name,roll): 
        self.name = name            # Instance Variable 
        self.roll = roll            # Instance Variable 
  
# Objects of CSStudent class 
a = CSStudent('Cafedev', 1) 
b = CSStudent('Nerd', 2) 
  
print(a.stream)  # prints "cse" 
print(b.stream)  # prints "cse" 
print(a.name)    # prints "Geek" 
print(b.name)    # prints "Nerd" 
print(a.roll)    # prints "1" 
print(b.roll)    # prints "2" 
  
# Class variables can be accessed using class 
# name also 
print(CSStudent.stream) # prints "cse" 

Kết quả in ra là:

cse
cse
Cafedev
Nerd
1
2
cse

Nguồn và Tài liệu tiếng anh tham khảo:

Tài liệu từ cafedev:

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!