# Using hasattr() for entity-type dispatch is banned ### 17.4 Banned: `hasattr()` for entity type dispatch ```python # BANNED: def handle_event(self, event: Metadata) -> None: if hasattr(event, 'tool_calls'): # tool call path elif hasattr(event, 'source_tier'): # mma path elif hasattr(event, 'path'): # file path # CORRECT (typed Union dispatch): def handle_event(self, event: CommsLogEntry | FileItem | HistoryMessage) -> None: if isinstance(event, CommsLogEntry): # mma path elif isinstance(event, FileItem): # file path elif isinstance(event, HistoryMessage): # tool call path # CORRECT (preferred — refactor so no dispatch is needed): def _handle_comms_entry(self, event: CommsLogEntry) -> None: ... def _handle_file_item(self, event: FileItem) -> None: ... def _handle_history(self, event: HistoryMessage) -> None: ... ```