मैं प्रोग्रामिंग के लिए बहुत नया हूं। मैंने बस कुछ हफ्तों के लिए शुरू किया। मैंने कक्षा के बारे में पढ़ने में घंटों बिताए लेकिन मैं अभी भी उलझन में हूं। मेरे पास एक विशिष्ट सवाल है।पायथन __init__ बनाम वर्ग गुण
कक्षा गुणों का उपयोग कब और प्रारंभकर्ता (__init__
) का उपयोग करने पर मुझे उलझन में है।
मैं समझता हूं कि __init__
का उपयोग करते समय, मैं तुरंत कोई मान निर्दिष्ट नहीं करता हूं, लेकिन जब मैं उस वर्ग का उपयोग कर ऑब्जेक्ट बनाता हूं तो केवल मूल्य असाइन करने की आवश्यकता होती है। और वर्ग गुण स्वचालित रूप से उस वर्ग के तहत बनाए गए ऑब्जेक्ट के निहित होते हैं।
लेकिन व्यावहारिक उपयोग की अवधि में, क्या उन्होंने वही काम पूरा किया? क्या वे एक ही काम करने के लिए सिर्फ दो अलग-अलग तरीके हैं? या __init__
ऐसा कुछ करता है जो क्लास गुण नहीं कर सकता है?
मैं इन कोडों के साथ कुछ परीक्षण चला गया, परिणाम समान हैं। मैं कब उपयोग कर रहा हूं उलझन में हूँ। मेरे लिए कक्षा विशेषता उपयोग करने के लिए और अधिक सुविधाजनक लग रहा है।
#use class attributes for class Numbers_1
class Numbers_1:
one = 1
two = 2
three = 3
six = two * three
def multiply(self):
return self.six * self.two * self.three
#use initializer for class Numbers_2
class Numbers_2:
def __init__(self, num10, num20, num30, num600):
self.num10 = num10
self.num20 = num20
self.num30 = num30
self.num600 = num600
def multiply(self):
return self.num600 * self.num20 * self.num30
#Now I run some test to compare the two classes...
x = Numbers_1()
y = Numbers_2(10, 20, 30, 20*30)
print(x.one) #print 1
print(y.num10) #print 10
print(x.six) #print 6
print(y.num600) #print 600
#assign attributes to each objects
x.eighteen = x.six * x.three
y.num18000 = y.num600 * y.num30
print(x.eighteen) #print 18
print(y.num18000) #print 18000
#try printing methods in each object
print(x.multiply()) #print 36
print(y.multiply()) #print 360000
#try reassign values to attributes in each object
x.one = 100
y.num10 = 1000
print(x.one) #prints 100
print(y.num10) #prints 1000
यह देखने के लिए एक बात यह है कि ** example.one = 2 ** उस उदाहरण के नामस्थान में आपके प्रथम श्रेणी के पुनर्मिलन 'एक' के उदाहरण पर, इसलिए यह साझा परिवर्तनीय बात _seems_ गलत है। चीजों की बेहतर समझ प्राप्त करने के लिए जोड़ना जैसे परिवर्तनीय चर के साथ खेलें। उदाहरण के लिए कक्षा स्तर और ओवरराइडिंग में घोषित करना अपरिवर्तनीय चर के लिए डिफ़ॉल्ट मान रखने का एक शानदार तरीका है। –
मेरा मतलब है "ऊपर एक वर्ग स्तर सूची चर में संलग्न"। –