Một instance hoặc các biến non-static là khác nhau đối với các đối tượng khác nhau. Trong khi đó tất cả các đối tượng có thể sử dụng các biến tĩnh (hay còn gọi là biến của lớp).
Tham khảo thêm lập trình hướng đối tượng Python.
Ví dụ, 1 học sinh lớp khoa học máy tính được đại diện bằng class CSStudent. Class này có 1 biến tính với giá trị “cse”. Đồng thời class này có các biến non-static là name và roll.
Trong C++ và Java chúng ta cần sử dụng từ khóa static để chỉnh định biến tĩnh.
Những đặc điểm của biến tĩnh
- Biến tĩnh chỉ được cấp phát bộ nhớ 1 lần khi đói tượng của class được khỏi tạo lần đầu.
- Các biến tĩnh được tạo bên ngoài các phương thức nhưng vẫn trong class
- Các biến tĩnh có thể truy cập thông qua class, nhưng không thông qua trực tiếp các instance
- Hành vi biến tĩnh không thay đổi giữa các đối tượng
Đối với python, cơ chế này khá đơn giản, nó không yêu cầu từ khóa static.
Chú ý: Tất cả các biến được gán giá trị trong khai báo lớp đều là biến tĩnh (class variable/static variable). Và Tất cả các biến được gán giá trị trong các phương thức thì được gọi là biến thể hiện (instance variable)
# 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('Geek', 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" # Now if we change the stream for just a it won't be changed for b a.stream = 'ece' print(a.stream) # prints 'ece' print(b.stream) # prints 'cse' # To change the stream for all instances of the class we can change it # directly from the class CSStudent.stream = 'mech' print(a.stream) # prints 'ece' print(b.stream) # prints 'mech'
Kết quả
cse cse Geek Nerd 1 2 cse ece cse ece mech
Các lưu ý khi sử dụng biến tĩnh trong Python
- Thay đổi giá trị biến tĩnh thông qu class (CSStudent.stream) thì toàn bộ giá trị được truy xuất từ các đối tượng đều ảnh hưởng (a.stream, b.stream)
- Thay đổi giá trị thông qua đối tượng truy xuất (a.stream) thì chỉ biến đó chịu ảnh hưởng (a.stream)
- Sau khi thay đổi giá trị thông qua đối tượng truy xuất (a.stream), thì việc thay đổi giá trị thông qua class (CSStudent.stream) sẽ không làm ảnh hưởng tới đối tượng đó (a.stream) nữa.
Tổng kết
Cơ chế xử lý biến tĩnh trong Python có 1 vài sự khác biệt so với ngôn ngữ lập trình khác. Việc khai báo biến tĩnh với Python cũng dễ dàng hơn rất nhiều. Điều này có thể tạo ra 1 vài khó khăn cho những bạn mới làm quen với Python. Hi vọng với bài viết này giúp bạn hiểu phần nào về biến tĩnh trong Python để ứng dụng vào công việc của mình hiệu quả.
Ngoài ra các bạn nên xem thêm bài viết về hàm tĩnh trong Python.