给出以下示例:
from dataclasses import dataclass
@dataclass
class Person:
name: str = ""
@dataclass(kw_only=True)
class AnotherPerson:
name: str = ""
print(Person.__match_args__)
print(AnotherPerson.__match_args__)
Run Code Online (Sandbox Code Playgroud)
运行时,您会得到以下信息:
('name',)
()
Run Code Online (Sandbox Code Playgroud)
根据dataclass match_args参数的文档(重点是我的):
match_args:如果为 true(默认为 True),将从生成的 __init__() 方法的参数列表中创建 __match_args__ 元组(即使未生成 __init__(),请参见上文)。如果为 false,或者类中已定义 __match_args__,则不会生成 __match_args__。
鉴于match_args默认值为 true,我认为__match_args__变量应该设置为方法中出现的值__init__,尽管关键字参数的情况似乎并非如此。这只是一个未记录的限制,还是我做错了什么?
__match_args__无论如何,我将如何在不明确写出这些元组的情况下生成它们?
python python-dataclasses python-3.10 structural-pattern-matching