मुझे एक छोटी सी समस्या है जिसे मैं समझ नहीं पा रहा हूं।पायथन - यह ऑब्जेक्ट का नया उदाहरण क्यों नहीं बनाता है?
def appendMethod(self, newInstance = someObject()):
self.someList.append(newInstace)
मैं विशेषताओं के बिना इस विधि कॉल:
object.appendMethod()
और वास्तव में मैं someObject का एक ही उदाहरण के साथ इस सूची संलग्न
मैं एक विधि है।
लेकिन अगर मैं इसे करने के लिए बदलने के लिए:
def appendMethod(self):
newInstace = someObject()
self.someList.append(newInstance)
मैं उस वस्तु की नया उदाहरण हर बार मिलता है, क्या फर्क है?
यहाँ एक उदाहरण है:
class someClass():
myVal = 0
class otherClass1():
someList = []
def appendList(self):
new = someClass()
self.someList.append(new)
class otherClass2():
someList = []
def appendList(self, new = someClass()):
self.someList.append(new)
newObject = otherClass1()
newObject.appendList()
newObject.appendList()
print newObject.someList[0] is newObject.someList[1]
>>>False
anotherObject = otherClass2()
anotherObject.appendList()
anotherObject.appendList()
print anotherObject.someList[0] is anotherObject.someList[1]
>>>True
इस सवाल * सख्ती से * परिवर्तनशील डिफ़ॉल्ट मान से संबंधित नहीं है, लेकिन के बारे में * जब * मूलभूत मूल्यों बनाई गई हैं है। @tomek ध्यान रखें कि प्रत्येक कार्य '__defaults__' विशेषता में अपने डिफ़ॉल्ट मानों का **' tuple' ** रखता है। लेकिन इसका क्या मतलब है? ठीक है, निश्चित रूप से के बाद से 'tuple's अपरिवर्तनीय कार्य हैं * नहीं कर सकते हैं * एक डिफ़ॉल्ट मान हर बार उन्हें कहा जाता है बनाते हैं, इसलिए डिफ़ॉल्ट मान समारोह * परिभाषा पर केवल * एक बार * बनाई गई है *। 'someObject' तरह' डीईएफ़ समारोह() एक समारोह के साथ बदलने के लिए प्रयास करें: प्रिंट ("कहा जाता है") 'और देखते हैं कि यह समारोह कहा जाता हो जाता है जब। – Bakuriu
यह एक अच्छा सवाल है। यह निश्चित रूप से मुझे उलझन में आया जब मैं सी ++ से आया - भूमि जहां कार्य द्वितीय श्रेणी की वस्तुओं को फ़ंक्शन परिभाषा के बजाय फ़ंक्शन निष्पादन पर मूल्यांकन किया जाता है। – Shashank