code: def hash(self):
          
          if not hasattr(self, "__hash"):
              self.__hash = self._calculate_hash()
          return self.__hash
docs: Calculate the hash for the block header. Note that this has the bytes
          in the opposite order from how the header is usually displayed (so the
          long string of 00 bytes is at the end, not the beginning).