Начиная с версии 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'