问题标签 [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 回答
189 浏览

python - 类型注释但跳过 auto_attribs 类中的类属性

我目前正在使用attrs. 这是一个树状结构,我需要一个父反向链接用于某些目的。OTOH,我想使用冻结的类(有缓存的属性,它们依赖于只读状态)。

这意味着树必须自下而上,在父级之前的子级实例化。为了解决这个问题,我发明了一种特殊的 weakref 对象,它可以被惰性绑定一次。

有自定义初始化代码在子级中创建一个未绑定的引用,并将它们绑定在父级中:

Child.parent由于child. _ 以前我把它作为一个自定义工厂的类属性,但后来它变成了一个-属性attrs,它真的不应该是。例如,我不希望parent在散列、比较、str 表示等中出现。

代码已经可以工作了,但是:如您所见,我想尽可能地做正确的事情并进行类型注释。直接parent放入__dict__意味着通常的工具不知道预期的类型。事实上,他们甚至可能会抱怨该parent属性根本不存在。

长话短说:有没有办法parent用类型注释声明为类属性,同时告诉attr.s跳过/忽略它?还是我忽略了另一种解决方案?

编辑:即如何使静态类型检查器识别parent属性的类型,而不使其成为attr.ib.

0 投票
1 回答
129 浏览

python - 当属性是另一个 attrs 对象时进行属性验证检查

我有两个 attrs 类,其中一个是另一个的属性。我想确保如果给一个特定的值,那么另一个有一个特定的值。

我看过验证器,认为没有任何东西可以捕捉到这一点。

这是我写的:

我认为这行得通,但我觉得我可能遗漏了一些明显的东西。

0 投票
1 回答
152 浏览

python - 如何避免 attrs 自定义验证函数中的“方法可能是函数”警告

给定以下代码:

运行pylint check.py将返回:

授予此代码是一个非常人为的示例,但我不确定我应该如何更改代码以取悦此消息?

编辑

以下工作要忽略:

0 投票
2 回答
56 浏览

python - Attrs 依赖于初始化的属性

假设我们有一个attrs类:

所以以下行为是正确的:

但这不是:

这显然会发生,因为Foo.b无论何时Foo.a给定值,总是被初始化:通过默认值或 on Foo.__init__

无论如何,是否可以使用任何初始化挂钩来完成此属性依赖?

0 投票
1 回答
397 浏览

python - 如何忽略pydantic中的字段repr?

当我想使用 attr 库忽略某些字段时,我可以使用repr=False选项。
但是我在 pydantic 中找不到类似的选项

请看示例代码

但是,这并不意味着根本没有选项,我可以使用语法print(a.dict(exclude={"boo"}))

pydantic 没有类似的选项repr=False吗?

0 投票
1 回答
35 浏览

python-attrs - 属性的初始化顺序令人困惑

我一直在通过以下方式使用 attrs:

当我运行代码时,我显然得到了一个错误。

但是,对我来说不直观的部分是Foo该类的验证器引发了错误。

我可能是错的,但据此我假设x属性的验证器Bar出现在Foo's 之后。

这是为什么?Bar在将' 的x属性作为参数传递给Foo' 的 init 方法之前验证它不是更有意义吗?

提前致谢!

0 投票
2 回答
126 浏览

python - 使用 cattr/attr 从 dict 构造一个对象,默认设置为 None

我想使用从字典重新创建我的对象,cattr但看起来这不适用于设置为的嵌套字段None

这是一个解释问题的代码示例:

现在,如果 Iry 使用以下方法构造我的对象:

我收到以下错误:

一种解决方法是在调用结构之前从字典中删除 None 字段:

我需要这样做吗?或者有更简单的解决方案

任何帮助深表感谢。

0 投票
0 回答
20 浏览

python-3.6 - 覆盖继承的默认属性方法

刚开始学习attrsdataclass

Shape我有以下Rectangle课程来说明我的问题。在我覆盖rect_length_default子类中的实现之前,代码工作正常。

我的问题:为default超类中定义的属性覆盖修饰方法的正确方法是什么?

输出:

0 投票
3 回答
98 浏览

python - 使用 attrs 创建具有互斥参数的 Python 类

我有一个有两个互斥参数(pricesreturns)的类。也就是说,不能同时提供它们以实例化对象。

但是,该类需要两者进行内部计算。所以我想计算pd.Series用户提供的缺失值。

我创建了两个替代类构造函数(from_pricesfrom_returns)。使用这些构造函数,该类将被正确实例化。

这是代码。它利用了attrs库 ( www.attrs.org )。

obj = MutuallyExclusive(prices, returns)但是,即使这两个系列彼此不兼容,用户仍然可以调用。捕捉这种情况并引发错误的最佳方法是什么?

编辑:
是否可以一起“禁用”常规构造函数?如果可以仅通过替代构造函数实例化对象,这将解决问题,不是吗?

0 投票
1 回答
78 浏览

python - attrs 包是否有“on_getattr”等效功能?

我为我的实体使用attrs包,在大多数情况下它就像一个魅力。我面临的一个问题是为属性定义getter(通常在纯python中@property是goto)

for setterattrs有一个方便的参数on_setattr,其工作方式如下:

它使我们免于@name.setter在任何情况下几乎使用(至少在我的经验中)

但是,当我们在返回属性时有一些逻辑时,当然,我们不能使用:

因为它将覆盖我们 attrs 名称的原始定义。所以我想知道在attrs这种情况下是否有任何内置方法,或者如果没有其他解决方案,除了定义另一个具有不同名称的属性,即

更新

一个解决方案是使用/覆盖__getattribute__attr 来添加类似的逻辑:

但最终,它会被大量 if/switch 块污染,更重要的是会与内置函数混淆__repr__