मेरे पास परिभाषित कक्षा में __del__
विधि है, जिसे सीटीएस इंटरफ़ेस में सी ++ नया कॉल करके बनाई गई कुछ सी ++ ऑब्जेक्ट्स को हटाने के लिए है। जब मैं अपनी कक्षा का एक उदाहरण नष्ट कर देता हूं तो मैं इन वस्तुओं को हटाना चाहता हूं। मैं कक्षा का एक टुकड़ा यहाँ दिखाया गया है:पायथन 3, सुपर .__ डेल __()
class Graph(QtCore.QObject):
def __init__(self):
super().__init__()
#list of objects created by calls to ctypes to create pointers to C++ objects which are instantiated with C++ new
self.graphs = []
def __del__(self):
print("in delete method")
for graph in self.graphs:
# call the C++ delete to free the storage used by this graph
myctypes.graphDelete(graph)
super().__del__()
जब मेरे ग्राफ़ वर्ग का एक उदाहरण हटा दी जाती है, __del__
विधि कहा जाता है और मैं अपने प्रिंट बयान देख सकते हैं और जब मैं नाशक विधि में एक ब्रेकपाइंट सेट सी ++ कोड, जैसा कि अपेक्षित है, यह ऑब्जेक्ट को हटा देता है।
super().__del__()
AttributeError: 'super' object has no attribute '__del__'
मैं कैसे सुनिश्चित करूँ कि माता पिता वर्ग (QtCore.QObject) अगर मैं बच्चा कक्षा में अपने ही __del__
विधि परिभाषित या होगा हटा दी जाती है: हालांकि, जब मेरी __del__
विधि super().__del__()
कहता है, मैं त्रुटि संदेश मिलता है अभिभावक वर्ग स्वचालित रूप से हटा दिया जाएगा?
कृपया 'सुपर (ग्राफ, स्वयं) .__ del __() 'और' QtCore.QObject .__ del __ (self)' आज़माएं। इससे कोई फर्क नहीं पड़ता है, लेकिन शायद यह काम करता है। – kay
धन्यवाद Kay, मैंने बस उन दोनों की कोशिश की और मुझे अभी भी विशेषता त्रुटि मिल गई है। – inwhack
@inwhack, मेरा मानना है कि कचरा कलेक्टर अपना काम करेगा, अप्रयुक्त उदाहरणों/चरों को साफ करेगा –