def _iterate_type(cls, element: Element): type_ = element.value().type if type_: yield type_
def _iterate_subtypes(cls, element: Element): type_ = element.value().type if type_: yield from ( sub_type for sub_type in type_.mro() if not is_base_type(sub_type) )
def value(self, element: Element) -> Value: if element not in self._cache: self._cache[element] = element.value() return self._cache[element]