问题标签 [python-attrs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
316 浏览

python - Mypy 为带有 attrs 包的装饰类的子类返回错误“意外的关键字参数”

我有两个使用attrs 包的装饰类,如下所示:

我得到Unexpected keyword argument "entity_id" for "Customer"这样的代码:

那么如何让Mypy知道__init__我的父类的方法。我应该提到代码运行良好,并且(至少看起来)没有运行时错误。

0 投票
2 回答
57 浏览

python - 修改其他属性的属性

我想创建一个Block具有以下行为的类:如果设置了 iip3,则将 oip3 设置为 iip3 + 增益。如果设置了 oip3,则将 iip3 设置为 oip3 - 增益如下:

我用 attrs 模块试过这个:

但是,这不起作用。我怀疑调用会set_oip3导致调用 set iip3,而后者又调用 set oip3。

必须有使用 attrs 的解决方案。

0 投票
1 回答
210 浏览

python - 如何用 python-attrs 构造解决“意外的关键字参数”,让 mypy 开心?

我有一个class A在外国图书馆。

我想扩展class Ba A

该代码似乎有效:

但 mypy/pyright 不开心。

0 投票
1 回答
89 浏览

python - 有没有用`python-attrs`记录属性的好方法?

我习惯于用文档字符串记录我的__init__()函数,但我想利用attrs包的好处。文档字符串在 IPython 或 Jupyter 笔记本中很有用,因此我可以看到参数的含义。有没有好的方法来做到这一点?在此示例代码中:

我如何向用户描述xy变量?例如,我如何指定这些以度为单位?

0 投票
1 回答
149 浏览

json - Structure JSON to an `attrs` class with extra fields using `cattrs`?

I would like to structure JSON to an attrs class that allows for extra fields using cattrs. cattrs by default will ignore extra fields and if forbid_extra_keys=True an error is raised when extra fields are passed.

I would like to do kind of the opposite: change the default behavior by allowing extra fields. I created an attrs class to do so but I'm a bit unsure on how to proceed with the custom cattrs converter. Here's what I have so far:

My issue is that since we are basically just unpacking the dictionary in the class, the types are not correct. I.e.: doing something like structured.foo + structured.bar will raise an error that we cannot concatenate/sum str and int.

Is there a way to do this in cattrs/attrs?

0 投票
2 回答
119 浏览

python - Python attrs/cattrs 使用冻结的 attrs 类作为字典键序列化字典

我想构造和解构一个attrs对象,其中包括dict使用简单冻结属性作为 dict 键的字段。这对于在运行时创建的对象非常有效,但是 freeze 属性无法使使用 cattrs 的 un/structuring 变得容易。

这是问题的一个简单示例:

在导入/导出过程之外,是否有某种方法可以在不使用 int 或 str 作为 dict 键的情况下序列化数据?我看到 cattrs 提供了自定义序列化过程的钩子,但是我不知道如何在非结构化时将 AbstractID 减少为 int,或者如何将其结构化回 AbstractID。

这可以做到吗?

0 投票
1 回答
93 浏览

python - 如何最好地使用 attrs 的属性初始化一个类?

在 vanilla Python 中创建一个类,该类在启动时也会启动另一个我将使用的类__init__(self)

但是在attrs中,我不能这样做。以下会产生错误,因为它传递的是_CountringAttr对象,而不是解析的字符串。

完成此任务的“正确”方法是什么?

0 投票
0 回答
22 浏览

python-attrs - Python 全局共享 attrs 类

我正在尝试使用 Python attrs 创建全局共享配置。我的目标是使用所有 attrs 函数和验证器,同时只初始化一次 attrs 类。

我正在尝试以下操作:

  1. 创建单例元类:
  1. 创建配置模块
  1. 从 main 初始化配置

我希望在我的程序模块中将 cfg 作为全局导入和重用,如下所示:

尽管有单例元类配置,但返回的 cfg 是 A 的新实例。有没有人对 attrs 做过类似的事情?

0 投票
0 回答
39 浏览

python - 键入包装 attrs.frozen 并添加新字段的装饰器

我正在尝试在 Python 中设置一个类装饰器,它的作用类似于attr.frozen但在创建之前添加了一个额外的字段(以及其他一些东西)。虽然代码运行良好,但我无法让 mypy 意识到新类具有新字段。我试图通过一个自定义 mypy 插件(完全如's documentationattr所述)和一个Protocol定义新类具有给定字段的组合来做到这一点。总之,代码分解如下(都在一个文件中,尽管我在这里分解了它)。

应该注意我正在运行 Python 3.7,所以我typing_extensions在需要的地方使用,但我相信无论版本如何,这个问题都会持续存在。

首先定义应该通知 mypy 新类具有新字段(added在此处调用)的协议:

现在根据文档field_transformer定义添加新字段的函数:attr

现在,最后,设置一个类装饰器来做我们想要的:

现在对于(失败的)mypy 测试:

理想情况下,我希望 mypy 消除所有这三个错误。坦率地说,我不确定这是否可能;可能是属性的动态添加是不可键入的,我们可能不得不强制我们库的用户在使用装饰器时编写自定义类型的存根。但是,由于我们总是向生成的类添加相同的属性,如果有解决方案会很棒,即使这意味着编写一个特别支持这个装饰器的自定义 mypy 插件(如果这甚至可能的话)。

0 投票
1 回答
27 浏览

python - Python attr.s 多类型验证

如果未提供则默认生成 UUID 的类,如果提供了则验证/创建 UUID 对象str

它应该有和没有提供一个值:

在没有提供的情况下,它应该使用默认设置生成一个新的 UUID。

如果提供了值,则应对其进行验证并创建一个 UUID 对象。


我收到一个错误,因为它只会验证一个实例类型,要么str要么UUID

如果我设置instance_of(UUID)它只会在不提供值的情况下工作。

如果我将它设置为instance_of(str)它只会str在提供的情况下工作。


我做错了什么,有没有更好的方法来完成我正在寻找的东西?