from dataclasses import dataclass from typing import Optional @dataclass class Annotation: def __init__(self, type_name: str) -> None: self._type_name = type_name def __hash__(self) -> int: return tuple(self.__dict__.values()).__hash__() class MorphosyntacticInfoMixin: def __init__(self, morpho_tag: str, *args, **kwargs) -> None: super().__init__(*args, **kwargs) self._morpho_tag = morpho_tag @property def morpho_tag(self) -> str: return self._morpho_tag class NameAnnotation(MorphosyntacticInfoMixin, Annotation): def __init__(self, morpho_tag: Optional[str] = None) -> None: super().__init__(morpho_tag=morpho_tag, type_name="name") class SurnameAnnotation(MorphosyntacticInfoMixin, Annotation): def __init__(self, morpho_tag: Optional[str] = None) -> None: super().__init__(morpho_tag=morpho_tag, type_name="surname") class StreetNameAnnotation(MorphosyntacticInfoMixin, Annotation): def __init__(self, morpho_tag: Optional[str] = None) -> None: super().__init__(morpho_tag=morpho_tag, type_name="street_name") class CityAnnotation(MorphosyntacticInfoMixin, Annotation): def __init__(self, morpho_tag: Optional[str] = None) -> None: super().__init__(morpho_tag=morpho_tag, type_name="city") class CountryAnnotation(MorphosyntacticInfoMixin, Annotation): def __init__(self, morpho_tag: Optional[str] = None) -> None: super().__init__(morpho_tag=morpho_tag, type_name="country") class PhoneNumberAnnotation(Annotation): def __init__(self) -> None: super().__init__("phone_number") class UrlAnnotation(Annotation): def __init__(self) -> None: super().__init__("url") class UserAnnotation(Annotation): def __init__(self) -> None: super().__init__("user") class EmailAnnotation(Annotation): def __init__(self) -> None: super().__init__("email") class TINAnnotation(Annotation): # Tax Identification Number def __init__(self) -> None: super().__init__("tin") class KRSAnnotation(Annotation): # National Court Register def __init__(self) -> None: super().__init__("krs") class OtherAnnotation(Annotation): # Non standard entity def __init__(self) -> None: super().__init__("other")