如何将属性传递给自定义数据类

How to pass Attributes to Custom Dataclass

我目前正在尝试在python中实现一个自己编写的数据class wrapper/decorator。 我在传递我想使用装饰器的函数的参数和属性时遇到了很大的麻烦。

到目前为止我的思考过程: 装饰器不知道 class 有多少属性和参数,但我仍然必须以某种方式访问​​它们。然后我将不得不通过“attribute”名称访问那些。由于 dataclass 装饰器主要做 init 做的事情(以及可选的 eq 等等),我必须通过classes/instances dict 访问所有参数。我已经尝试在数据模型的 Pythons 语言参考中自己找到它,但我找不到它。

我将不胜感激任何帮助,无论是我在文档中找到答案的地方、某种提示还是一小段代码片段。

dataclass 装饰器在为 class:

创建默认的 __init__ 实例方法时基本上做了两个步骤
  1. 它使用 __annotations__ 提取所有 class 变量(参见 PEP 526) attribute of the class, as is documented in the docstring of dataclass

  2. 它创建一个 string 包含整个函数定义,带有完整的参数列表,从步骤 1 的 class 变量生成,如果存在它们的默认值。然后它使用 exec 实际上 运行 作为 python 代码,这又生成一个新的 user-defined function object。该新对象最终分配给装饰的 class object.

    __init__ 属性

因此要修改新创建的 __init__ 函数的参数列表以匹配 class 变量,dataclass 创建一个新的函数定义。似乎没有直接的方法可以在函数定义本身之外修改函数对象的参数列表。