from copy import copy from typing import TYPE_CHECKING, Protocol, Self, runtime_checkable if TYPE_CHECKING: from elements import Element from puppytype import RenderableElement, TemplateDict class Clonable[T = Self](Protocol): def clone(self) -> T: return copy(self) @runtime_checkable class Renderable(Protocol): def render(self, element: "Element", templates: "TemplateDict") -> "RenderableElement": return element