मान लीजिए मैं एक namedtuple
इस तरह है:नामांकित उप-वर्ग के लिए अतिरिक्त प्रारंभिकरण कैसे प्रदान करें?
EdgeBase = namedtuple("EdgeBase", "left, right")
मैं इस के लिए एक कस्टम हैश समारोह लागू करना चाहते हैं, तो मैं निम्नलिखित उपवर्ग बनाएँ:
class Edge(EdgeBase):
def __hash__(self):
return hash(self.left) * hash(self.right)
के बाद वस्तु अपरिवर्तनीय है, मैं चाहते हैश मूल्य केवल एक बार की गणना करने के, तो मैं ऐसा करते हैं:
class Edge(EdgeBase):
def __init__(self, left, right):
self._hash = hash(self.left) * hash(self.right)
def __hash__(self):
return self._hash
यह काम कर रहा है, लेकिन मैं वास्तव में के बारे में यकीन नहीं है पाइथन में विशेष रूप से tuples के साथ ubclassing और प्रारंभिकरण। क्या इस समाधान के लिए कोई नुकसान है? क्या ऐसा करने का एक अनुशंसित तरीका है? यह ठीक है? अग्रिम में धन्यवाद।
टेस्ट से पता चला है कि हैश मान को कैश करने के लायक नहीं है, देखें [समस्या # 9685] (https://mail.python.org/pipermail/python-bugs-list/2013-January/192363.html) –