Class Variables vs Instance Variables
Mọi biến ngoài __init__ là class variable (static). Biến trong __init__ (gán qua self.) là instance variable.
Ví dụ minh họa
class MyClass:
stat_elem = 456 # Class variable
def __init__(self):
self.object_elem = 789 # Instance variable
c1 = MyClass()
c2 = MyClass()
# Initial
print(c1.stat_elem, c1.object_elem) # 456 789
print(c2.stat_elem, c2.object_elem) # 456 789
# Thay đổi class variable
MyClass.stat_elem = 888
print(c1.stat_elem, c1.object_elem) # 888 789
print(c2.stat_elem, c2.object_elem) # 888 789
# Thay đổi instance variable
c1.object_elem = 777
print(c1.stat_elem, c1.object_elem) # 888 777
print(c2.stat_elem, c2.object_elem) # 888 789 (c2 không đổi)
Giải thích
- Class variable: chia sẻ bởi tất cả instance, truy cập qua
ClassName.attrhoặcinstance.attr(nếu instance không có attribute trùng tên) - Instance variable: riêng biệt cho từng instance, tạo trong
__init__hoặc gán trực tiếpself.attr = value