ตัวแปรที่ประกาศภายในคลาสแต่นอกเมธอด เรียกว่า Class Variable (หรือ Static Variable) แชร์ระหว่างทุก Instance ของคลาสนั้น
ตัวอย่างพื้นฐาน
class Fruits:
count = 0 # Class variable
def __init__(self, name, count):
self.name = name
self.count = count # Instance variable (ชื่อซ้ำแต่คนละตัว!)
Fruits.count += count # เข้าถึง class variable ผ่านชื่อคลาส
apples = Fruits("apples", 3)
pears = Fruits("pears", 4)
print(apples.count) # 3 (instance)
print(pears.count) # 4 (instance)
print(Fruits.count) # 7 (class)
print(apples.__class__.count) # 7
print(type(pears).count) # 7
Class Variable vs Instance Variable ชื่อเดียวกัน
class Example:
static_var = 9
# เข้าถึงผ่านคลาส
print(Example.static_var) # 9
# เข้าถึงผ่านอินสแตนซ์ (อ่านได้)
inst = Example()
print(inst.static_var) # 9
# "เปลี่ยน" ผ่านอินสแตนซ์ → สร้าง instance variable ใหม่!
inst.static_var = 12
print(inst.static_var) # 12 (instance variable)
print(Example.static_var) # 9 (class variable ไม่เปลี่ยน!)
จุดสำคัญ
- Class Variable แชร์ร่วมกันทุก Instance
- การกำหนด
instance.var = xจะสร้าง Instance Variable ใหม่ที่ "บัง" (shadow) Class Variable - ใช้
ClassName.varเพื่ออ่าน/เขียน Class Variable จริง - ใช้
instance.__class__.varหรือtype(instance).varเข้าถึงผ่านอินสแตนซ์ก็ได้