Пример кода:
Код: Выделить всё
from typing import Optional
import re
from dataclasses import dataclass, fields
@dataclass(frozen=True)
class TestClass:
required_field_1: str
required_field_2: int
optional_field: Optional[str]
def get_all_optional_fields(fields) -> list:
return [field.name for field in fields if __is_optional_field(field)]
def __is_optional_field(field) -> bool:
regex = '^typing.Union\[.*, NoneType\]$'
return re.match(regex, str(field.type)) is not None
print(get_all_optional_fields(fields(TestClass)))
Что я делаю в данный момент для решения этой проблемы, так это использую регулярное выражение на основе имени поля, но мне не нравится этот подход. Есть ли лучший способ сделать это?
Подробнее здесь: https://stackoverflow.com/questions/568 ... g-optional