मुझे इस तरह के प्रश्नों के समान एहसास हुआ है, हालांकि बिल्कुल इस तरह से नहीं।क्या अजगर में एक प्रतिलिपि बनाने वाला कोई अच्छा तरीका है?
मैं अपनी कक्षा के निर्माता के लिए एक वैकल्पिक तर्क लेना चाहता हूं कि, यदि यह मेरी कक्षा का एक उदाहरण है, तो इसकी प्रतिलिपि बनाई जाएगी। उदाहरण के लिए, कुछ की तरह (मैं जानता हूँ कि इस कोड काम नहीं करता है!):
class Foo(object):
def __init__(self, foo=None):
self.x = None
self.y = None
self.z = None
if foo is not None and isinstance(foo, Foo):
self = copy.deepcopy(foo)
a = Foo()
a.x = 1
a.y = 2
a.z = 3
b = Foo(a)
print b.x
print b.y
print b.z
मैं जानता हूँ कि यह करने के लिए कुछ व्यावहारिक समाधान नहीं है। मैं foo की इसी विशेषता के मूल्य के अनुसार स्वयं की प्रत्येक विशेषता सेट कर सकता हूं, लेकिन यह वास्तव में परेशान होगा क्योंकि मेरी कक्षा में कई, कई विशेषताएं हैं। या मैं बस उपयोग कर सकता था:
b = copy.deepcopy(a)
... लेकिन अगर यह संभव है तो मैं नहीं चाहूंगा। मैं __new__
ओवरराइडिंग से बचने की भी उम्मीद कर रहा हूं।
क्या कोई कॉपी कन्स्ट्रक्टर बनाने के लिए पाइथन में वास्तव में कोई सभ्य तरीका नहीं है?
क्यों नहीं करते आप बी = copy.deepcopy (ए) का उपयोग करना चाहते हैं? मेरा मतलब है, अगर यह काम करता है, और यह बी = फू (ए) से लिखने के लिए और अधिक लाइन नहीं लेता है .... – DGH
ठीक है, मुझे लगता है कि मेरी उंगलियां अभी भी पार हो गई हैं कि एक प्रतिलिपि बनाने योग्य है। और स्पष्ट रूप से, यह क्यों नहीं है? ऐसा नहीं है कि यह वास्तव में असामान्य अनुरोध है। कोई सोचता है कि सभी ऑब्जेक्ट उन्मुख भाषाओं में यह सुविधा होगी। – carmenism
यह सुविधा क्यों नहीं है? क्योंकि यह सिर्फ वाक्य रचनात्मक चीनी है, बिल्कुल वही बात कहने का एक अलग तरीका है। जब तक कार्यक्षमता कोड की केवल एक बहुत ही सरल रेखा के साथ गहरी प्रतिलिपि बनाने के लिए मौजूद है, तो यह क्यों मायने रखता है कि यह "कन्स्ट्रक्टर" है या नहीं? – DGH