Начиная с версии 3.0 существует поддержка только для ключевого слова аргумента:
class S3Obj:
    def __init__(self, bucket, key, *, storage_class='Standard'):
        self.bucket = bucket
        self.key = key
        self.storage_class = storage_class
 Как получить такую подпись с использованием dataclasses? Что-то вроде этого, но предпочтительно без SyntaxError:
@dataclass
class S3Obj:
    bucket: str
    key: str
    *
    storage_class: str = 'Standard'
 Идеально декларативный, но с использованием __post_init__ крючка и/или декоратора-декоратора тоже отлично - до тех пор, пока код будет повторно использоваться.
Изменение: может быть, что-то вроде этого синтаксиса, используя многоточие
@mydataclass
class S3Obj:
    bucket: str
    key: str
    ...
    storage_class: str = 'Standard'
