问题标签 [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 投票
2 回答
74 浏览

python - attrs 如何欺骗调试器进入自动生成的代码?

我正在浏览一些使用attrs模块的代码。因此,在调试单步执行某些代码时,我最终会得到不作为实际文件存在但自动生成的源。

这个问题是关于使用什么 python 技术来实现这种行为的。用于示例的实际库或示例本身只是展示概念的具体内容。

例子

安装库

表现出行为(test.py)的代码:

执行该代码并单步执行会RawSerialPort导致调试器在自动生成的源中发现自己:

注意def __init__定义,实际源文件中不存在这样的定义,而是由attrs.

我的问题是这里有什么 python 机制来实现这种甚至欺骗调试器的行为?

0 投票
0 回答
1430 浏览

python - 如何用字符串表示反序列化枚举?

我想创建一个类,它有一个枚举作为属性。这个枚举应该有一个字符串表示,当转储使用 enum 属性作为 JSON 字符串的类的实例时,它显示为人类可读的值。在下面的最小工作示例中,我以三种不同的方式创建了三个枚举。

反序列化后,每个属性都向我们表明它来自一个枚举,但具有字符串表示的枚举除外。它只是一个字符串。

如果不可能实现这样的结构,我想知道为什么。

要求

如果你想测试它,你必须安装jsonsattrs使用

最小的工作示例

在这里,您会看到一个最小的工作示例。

orderorder_deserialised变量的结构:

如您所见,order_deserialised蔬菜显示为字符串而不是枚举。

0 投票
1 回答
167 浏览

python - 使用 attrs 创建的类的索引类型无效

我目前正在重写一个程序,我将两个较旧的脚本合并为一个。我重用了大部分代码,也mypy用于新版本中的类型检查。

总是出现的是一个 mypy 错误,它在尝试从我创建的类中访问属性时具有无效的索引类型attrs

在这两种情况下,我都会收到以下消息: Invalid index type "str" for "Dict[_KT, _VT]"; expected type "_KT"

我可以跳过的唯一方法是# type: ingore在行尾手动添加。要么我没有正确使用课程,要么我监督了一些事情。

那里有人对我有提示吗?提前谢谢。

0 投票
1 回答
38 浏览

python-attrs - 在 attrs 自动生成的 init 方法签名中禁用前导下划线删除

attr 从生成的__init__方法的属性名称中去除前导下划线。有没有办法为特定属性覆盖它,而不是完全禁用类的自动生成初始化方法?

我想使用attr类来表示 MongoDB 文档,它在 Python 中是带有_id记录唯一 ID 的键的字典。我希望能够拥有一个仅比 .from_db(cls, doc)多一点的类方法return cls(**doc),但是存在_id原因“TypeError:init () got an unexpected keyword argument '_id'”。现在,我通过声明 `_id: attr.ib(init=False, default=None) 来解决它,并具有:

但这似乎真的很糟糕。有没有更好的办法?

0 投票
1 回答
215 浏览

python - 在 attrs 类中为 init 参数添加类型提示

有没有办法将 init arg 的类型提示与属性的类型提示分开?

请让我通过例子更好地解释自己。如果在普通班上,我会做类似的事情:

attrs 中的等价物是什么?也许这个?

我认为不是因为当我尝试以下操作时,我没有得到匹配的结果:

有没有办法将这些类型提示的 attrs 信号发送到它创建的 init 方法中?

还尝试在文档中搜索解决方案,但也许我错过了。

0 投票
1 回答
212 浏览

python - 如何在启动时为 attr.s 设置默认值?

使用 python attrs 库并尝试在 Settings 对象中设置目录路径。当从 shell 本身设置环境变量时,这非常有用。但是,如果没有从 shell 设置 TEST_TMPDIR 并且我尝试在 python 代码本身中设置该值,则默认值初始化为 None。

下面的代码示例默认为无。

只有在 shell 级别设置环境变量时,代码当前才有效。所以export TEST_TMPDIR="/tmp/"在终端中做然后阅读 Settings() 工作。

尝试在其中读取 os.environ["TEST_TMPDIR"]__attrs_post_init__确实返回了 python 代码设置的值。

任何有关为什么在启动时未设置默认值的链接都会有所帮助。

0 投票
1 回答
53 浏览

python - 具有随机属性值的 Python attrs?

attrs用来创建A具有属性的类,surprise然后每次访问它时都应该返回一个不同的随机值(可能从可能的值列表中选择)。

我们如何添加一个钩子来访问surprise类的属性?这个钩子可以让我们在每次访问surprise属性时生成一个新的字符串值。

谢谢!

期望:

0 投票
1 回答
304 浏览

python - 使用 python attrs 库将 kwargs 传递给基类

我正在将attrs python 库用于继承自非 attrs 基类的子类。我想通过 kwargs 向孩子公开所有父参数,但无法弄清楚如何使用 attrs 进行处理。

基本示例:

我对父类没有很大的自由裁量权,但在将其设置为 attrs 时也看到了围绕默认值的挑战。有没有办法避免在 Child 上指定所有 Parent 参数?如果我不使用 attrs 我可以做一些类似的事情**kwargs_Parent并初始化super(Child,self).__init__(a=2*x, **kwargs)

0 投票
2 回答
143 浏览

python - 您可以使用 namedtuples/dataclass/attrs 创建一个灵活大小的类还是必须使用传统类?

如果有一个看起来像这样的 json 数据集。

并且需要将其转换为一组对象,其中可以使用相同的类来定义对象。

但是属性可以通过点符号访问,就像这样。

使用传统课程的方法是这样的。

有没有办法对命名元组或数据类或属性做基本相同的事情,适用于不同大小的数据,并具有这些数据类型的所有良好的不变性、repr 等功能。

0 投票
0 回答
469 浏览

django - 如何解析字段必须是字段名称作为键的映射(dict / OrderedDict)或在石墨烯中返回此类映射的函数?

我正在尝试使用 attrs 结构和解构在 django 中使用石墨烯创建一个人模式,以便使用 JSONB 将我的数据输入到数据库中。

到目前为止,这是我创建的:

模型.py:

架构.py:

和我的 person.py (目前没有给我任何问题):

这是我现在遇到的错误

在整个构建过程中,我遇到了很多此类错误,并且根据我对 Django 和 Graphene 的介绍知识,我确信我主要只是在代码上添加了创可贴,因此您可以建议进行任何重构来实现这一点更坚固将不胜感激。