【发布时间】:2022-06-24 01:00:04
【问题描述】:
如何利用 Python 3.10 的 dataclass 中提供的新 kw_only 和 slots 功能,同时还支持旧版本的 Python?
我想设置kw_only 的主要原因是为了让我可以将更多置信度值转到正确的字段,而slots 用于我可能会创建很多并且不想要不必要的对象dict 在幕后徘徊。
我最初想使用类似的东西:
from dataclasses import dataclass
# check if we're using Python >= 3.10
if 'kw_only' in dataclass.__kwdefaults__:
_dataclass = dataclass
# redefine this to ignore new options
def dataclass(cls, *, kw_only=False, slots=False, **kwargs):
if cls is None:
return _dataclass(*kwargs)
return _dataclass(cls)
但这导致 MyPy 抱怨函数被重新定义。
Python 3.8 是我个人关心支持的最古老的版本。
【问题讨论】: