Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Biến trong và ngoài hàm __init__() trong Python class

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.attr hoặc instance.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ếp self.attr = value