जब किसी क्लास के अंदर लेकिन किसी मेथड के बाहर वेरिएबल घोषित किया जाता है, तो उसे क्लास वेरिएबल या स्टेटिक वेरिएबल कहा जाता है। यह सभी इंस्टेंसेज़ द्वारा साझा किया जाता है।
उदाहरण 1: काउंटर के रूप में उपयोग
class Fruits:
count = 0 # क्लास वेरिएबल
def __init__(self, name, count):
self.name = name
self.count = count # इंस्टेंस वेरिएबल (क्लास वेरिएबल को शैडो करता है)
Fruits.count = Fruits.count + count # क्लास वेरिएबल अपडेट
def main():
apples = Fruits("apples", 3)
pears = Fruits("pears", 4)
print(apples.count) # 3 (इंस्टेंस वेरिएबल)
print(pears.count) # 4 (इंस्टेंस वेरिएबल)
print(Fruits.count) # 7 (क्लास वेरिएबल)
print(apples.__class__.count) # 7
print(type(pears).count) # 7
if __name__ == '__main__':
main()
आउटपुट
3
4
7
7
7
उदाहरण 2: क्लास वेरिएबल एक्सेस और शैडोइंग
class Example:
staticVariable = 9
# क्लास के माध्यम से एक्सेस
print(Example.staticVariable) # 9
# इंस्टेंस के माध्यम से एक्सेस (क्लास वेरिएबल पढ़ता है)
instance = Example()
print(instance.staticVariable) # 9
# इंस्टेंस पर असाइनमेंट - नया इंस्टेंस वेरिएबल बनाता है!
instance.staticVariable = 12
print(instance.staticVariable) # 12 (इंस्टेंस वेरिएबल)
print(Example.staticVariable) # 9 (क्लास वेरिएबल अपरिवर्तित)
आउटपुट
9
9
12
9
मुख्य बिंदु
- क्लास वेरिएबल:
ClassName.variableके माध्यम से एक्सेस/बदलें। सभी इंस्टेंसेज़ साझा करते हैं। - इंस्टेंस वेरिएबल:
self.variableके माध्यम से एक्सेस/बदलें। प्रत्येक इंस्टेंस का अपना होता है। - शैडोइंग:
instance.variable = valueक्लास वेरिएबल को नहीं बदलता, बल्कि इंस्टेंस के लिए नया एट्रिब्यूट बनाता है। - पढ़ते समय पायथन पहले इंस्टेंस `__dict__` जांचता है, फिर क्लास `__dict__`।
सर्वोत्तम अभ्यास
- क्लास वेरिएबल बदलने के लिए हमेशा
ClassName.variable = valueका उपयोग करें। - साझा कॉन्फ़िगरेशन, काउंटर्स, कॉन्स्टेंट्स के लिए क्लास वेरिएबल्स का उपयोग करें।
- इंस्टेंस-विशिष्ट डेटा के लिए केवल इंस्टेंस वेरिएबल्स (
self.x) का उपयोग करें।