Chúng ta đã biết rằng không có từ khóa static trong Python. Tất cả các biến được gán giá trị bên trong phần code khai báo class đều là các class variable – biến thuộc về lớp.
Chúng ta nên cẩn thận khi thay đổi giá trị của class variable. Nếu chúng ta cố gắng thay đổi class variable bằng cách sử dụng đối tượng, một instance variable mới (hay còn gọi là non-static variable) cho đối tượng cụ thể đó sẽ được tạo ra, và cái instance variable này sẽ “đè” lên các class variables. Dưới đây là đoạn chương trình Python mô tả việc này.
# -----------------------------------------------------------
#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/
# -----------------------------------------------------------
# Class for Computer Science Student
class CSStudent:
stream = 'cse' # Class Variable
def __init__(self, name, roll):
self.name = name
self.roll = roll
# Driver program to test the functionality
# Creating objects of CSStudent class
a = CSStudent("cafedevn", 1)
b = CSStudent("Nerd", 2)
print "Initially"
print "a.stream =", a.stream
print "b.stream =", b.stream
# This thing doesn't change class(static) variable
# Instead creates instance variable for the object
# 'a' that shadows class member.
a.stream = "ece"
print "\nAfter changing a.stream"
print "a.stream =", a.stream
print "b.stream =", b.stream
Kết quả in ra là:
Initially
a.stream = cse
b.stream = cse
After changing a.stream
a.stream = ece
b.stream = cse
Chúng ta chỉ nên thay đổi class variable bằng cách sử dụng class name – tên lớp
Dưới đây là đoạn chương trình Python mô tả cách thay đổi class variable trong Python
# Program to show how to make changes to the
# class variable in Python
# Class for Computer Science Student
class CSStudent:
stream = 'cse' # Class Variable
def __init__(self, name, roll):
self.name = name
self.roll = roll
# New object for further implementation
a = CSStudent("check", 3)
print "a.tream =", a.stream
# Correct way to change the value of class variable
CSStudent.stream = "mec"
print "\nClass variable changes to mec"
# New object for further implementation
b = CSStudent("carter", 4)
print "\nValue of variable steam for each object"
print "a.stream =", a.stream
print "b.stream =", b.stream
Kết quả in ra là:
a.tream = cse
Class variable changes to mec
Value of variable steam for each object
a.stream = mec
b.stream = mec
Nguồn và Tài liệu tiếng anh tham khảo:
Tài liệu từ cafedev:
- Full series tự học Python từ cơ bản tới nâng cao tại đây nha.
- Ebook về python tại đây.
- Các series tự học lập trình khác
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!