class_docstr: Parse a requirement.
  
  Parse a given requirement string into its parts, such as name, specifier,
  URL, and extras. Raises InvalidRequirement on a badly-formed requirement
  string.
class_docstr_tok: ["Parse","a","requirement",".","Parse","a","given","requirement","string","into","its","parts",",","such","as","name",",","specifier",",","URL",",","and","extras",".","Raises","InvalidRequirement","on","a","badly-formed","requirement","string","."]
code: def __hash__(self) -> int:
      return hash(
          (
              self.__class__.__name__,
              *self._iter_parts(canonicalize_name(self.name)),
          )
      )
  
file_path: packaging/src/packaging/requirements.py
imports: from typing import Any, Iterator, Optional, Set
  from ._parser import parse_requirement
  from ._tokenizer import ParserSyntaxError
  from .markers import Marker, _normalize_extra_values
  from .specifiers import SpecifierSet
  from .utils import canonicalize_name
label_desc: Use image node_id 5 for calling the Requirement obj's underlying member method code with example usage: obj.__hash__() and returns: hash