self and __init__
self और __init__ क्या हैं
जब आप Python में class बनाते हैं, दो चीज़ें बार-बार आती हैं: __init__ और self। __init__ constructor है — यह नया object set करता है। self वो तरीका है जिससे method अपने object को दर्शाता है। साथ में ये हर object को अपना data रखने देते हैं।
__init__ constructor
class Student:
def __init__(self, name, roll):
self.name = name
self.roll = roll
s = Student("Aman", 12)
print(s.name, s.roll)
__init__ तब अपने-आप चलता है जब आप Student("Aman", 12) लिखते हैं। यह values पाकर उन्हें object पर self.name और self.roll से store करता है।
हर method को self क्यों चाहिए
class Student:
def __init__(self, name):
self.name = name
def greet(self):
return "Hi, " + self.name
s = Student("Aman")
print(s.greet())
हर method पहले self लेता है, ताकि उसे पता हो वो किस object पर काम कर रहा है। self.name उस object का अपना नाम पढ़ता है। जब आप s.greet() call करते हैं, Python s को self के रूप में अपने-आप भेजती है।
हर object का अपना data
a = Student("Aman")
b = Student("Diya")
print(a.greet()) # Hi, Aman
print(b.greet()) # Hi, Diya
Hi, Diya
चूँकि data self पर store होता है, हर object अपनी copy रखता है। a और b अलग students हैं अलग नामों के साथ — यही self का पूरा मक़सद है।
__init__ में default values
class Student:
def __init__(self, name, marks=0):
self.name = name
self.marks = marks
s = Student("Aman") # marks default 0
print(s.name, s.marks)
आप __init__ में parameter को default दे सकते हैं, तो वो optional हो जाता है। यहाँ caller न दे तो marks default 0 होता है।
आम गलतियाँ
- Method में
selfभूलना। हर method को इसे पहले parameter के रूप में चाहिए। - Call में self pass करना।
obj.greet()लिखिए,obj.greet(obj)नहीं — Python जोड़ती है। self.nameके बजायnameइस्तेमाल करना।selfबिना, यह temporary local variable है।- गलत dunder spelling। यह
__init__है, हर तरफ़ दो underscores।
सारांश
__init__constructor है — object बनते ही चलता है।selfका मतलब "यह object" है और हर method का पहला parameter है।- Data को
self.attributeसे store कीजिए ताकि हर object अपना रखे। - Method call करते समय Python
selfअपने-आप भेजती है। - आप
__init__parameters को default values दे सकते हैं।
आगे, classes बढ़ाइए inheritance और polymorphism से, या देखिए magic methods।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
Python में __init__ क्या है?
__init__ constructor है — एक ख़ास method जो object बनाते ही अपने-आप चलता है। यह object की शुरुआती values set करता है। जैसे, नए Student को बनते ही उसका नाम और roll number देना।Python में self का क्या मतलब है?
self मौजूदा object को दर्शाता है — वो ख़ास जिस पर method काम कर रहा है। इससे आप उस object का अपना data store और पढ़ते हैं, जैसे self.name। यह हमेशा method का पहला parameter होता है।self पहला parameter क्यों होना चाहिए?
obj.method() call करते हैं, Python अपने-आप object को पहले argument के रूप में भेजती है। तो method में उसे पाने को self होना चाहिए। इसे भूलना "missing argument" error देता है।क्या method call करते समय self खुद pass करूँ?
obj.greet() लिखते हैं, obj.greet(obj) नहीं। आप self सिर्फ़ definition में लिखते हैं, कभी call में नहीं।self.name और name में क्या अंतर है?
self.name object पर store हुआ attribute है और object के जीवित रहने तक रहता है। method के अंदर साधारण name एक local variable है जो method ख़त्म होते ही ग़ायब हो जाता है।