为类创建装饰器以应用数据类和JsonSchemaMixin ...不起作用

问题描述

我确实查看了所有现有的SO问题,并尽我所能地搜索了谷歌,尝试了几种不同的选择,但似乎无法获得我想要的工作。

背景

一个简单的问题-我的代码中有一堆数据类。

我希望将它们全部更改为从dataclasses-jsonschema JsonSchemaMixin继承,以便可以以编程方式为所有对象生成模式。

当然,简单的方法是我可以更改代码中的所有实例以从JsonSchemaMixin混合继承。

但是我当时想我也可以编写自己的装饰器,以a)一次应用@ dataclass,b)mixin dataclasses-schema。 ...我的想法是减少出错的机会,我可以尝试编写一个类装饰器(我曾经创建并使用过自己的函数装饰器)

# OLD

@dataclass
class X:
    ....

# Add the mixin `by hand` everywhere

@dataclass
class X(JsonSchemaMixin):
    x: int
    y: float

# What I want is to make my own decorator to do both:

@dataclass_mixedin
class X:
    x: int
    y: float

问题

一个非常简单的问题-我无法解决这个问题:(

我尝试过的

尝试编号1:

from dataclasses import dataclass
from dataclasses_jsonschema import JsonSchemaMixin

def dc_schema(cls):
    @dataclass
    class _decorated(JsonSchemaMixin,cls):
        pass
    return _decorated

@dc_schema
class Data:
    x: int
    y: float
        
a = Data(x=5,y=1.1)

以上操作失败,并带有意外的关键字args x和y。

尝试2:

def dc_schema2(cls):
    # Try applying dataclass() directly:
    class _decorated(JsonSchemaMixin,cls):
        pass
    _decorated = dataclass(_decorated)
    return _decorated

@dc_schema2
class Data2:
    x: int
    y: float

d = Data2(x=1,y=1.1)

再次-失败,出现意外参数。

所以我猜想我缺少dataclass遍历类结构以查找带有注释(https://docs.python.org/3/library/dataclasses.html)的类变量。

但是我不知道该怎么做

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)