आज मैं एक साधारण स्क्रिप्ट पर काम कर रहा था जब मैंने पाइथन उदाहरण के चर के तरीके में एक अजीब क्विर्क देखा।पाइथन ऑब्जेक्ट्स के बीच साझा किए गए इंस्टेंस चर का इलाज क्यों करता है?
कहते हैं कि हम एक सरल वस्तु है:
class Spam(object):
eggs = {}
def __init__(self, bacon_type):
self.eggs["bacon"] = bacon_type
def __str__(self):
return "My favorite type of bacon is " + self.eggs["bacon"]
और हम अलग तर्क के साथ इस वस्तु के दो उदाहरणों बनाएँ:
spam1 = Spam("Canadian bacon")
spam2 = Spam("American bacon")
print spam1
print spam2
परिणाम puzzling हैं:
My favorite type of bacon is American bacon
My favorite type of bacon is American bacon
यह ऐसा लगता है कि "अंडे" शब्दकोश को सभी अलग-अलग "स्पैम" उदाहरणों के बीच साझा किया जाता है - या तो वह या यह है जब भी एक नया उदाहरण बनाया जाता है तो ओवरराइट किया जाता है। के बाद से हम इसे प्रारंभ समारोह में उदाहरण चर की घोषणा के द्वारा हल कर सकते हैं यह वास्तव में हर दिन जीवन में एक समस्या यह है,:
class Spam(object):
def __init__(self, bacon_type):
self.eggs = {}
self.eggs["bacon"] = bacon_type
def __str__(self):
return "My favorite type of bacon is " + self.eggs["bacon"]
spam1 = Spam("Canadian bacon")
spam2 = Spam("American bacon")
print spam1
print spam2
इस तरह से लिखा कोड के साथ
, परिणाम हम क्या उम्मीद है:
My favorite type of bacon is Canadian bacon
My favorite type of bacon is American bacon
इसलिए जब मैं इस व्यवहार से नहीं हूं, मुझे समझ में नहीं आता कि पाइथन इस तरह क्यों काम करता है। क्या कोई इस पर रोशनी डाल सकता है?
के संभावित डुप्लिकेट [मैं अजगर वर्ग डेटा उदाहरणों के बीच साझा होने से कैसे बच सकता हूं?] (Http://stackoverflow.com/questions/1680528/how-do-i-avoid-having-python-class-data-shared -मोंग-इंस्टेंस) –