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

python - 模拟 attr.ib() 的默认值

我有类似以下的情况

所有的类和测试都在不同的文件中,并且 mocker 是 pytest_mock 提供的一个夹具,它只是 unittest.mock 的一个包装器,可以更轻松地进行清理。

我遇到的问题是,在运行单元测试时,test_var 被正确分配为补丁函数中的 MagicMock。所以当 test_var.some_func() 返回时,一切都很好。

self._prop.some_func()被调用时,NotImplementedException由于补丁似乎没有影响这一点,所以会被提升。

在我的单元测试中,我可以设置sut._prop = MagicMock(),但这是一个内部实现细节,使其成为一个脆弱的测试。

如何模拟属性中的默认变量以避免这种情况?

0 投票
1 回答
1505 浏览

python - Python Attrs 在设置属性时触发转换器

在使用 python-attrs 时,在设置属性时触发转换器的好方法是什么。

前任:

0 投票
1 回答
521 浏览

python-attrs - 如何指定不是类属性的 __init__ 参数

使用 attrs,我如何指定一个不是类属性的init参数。

例如,CRC8 对象可能会在构造函数中传递一些字节或字节数组,但我不想存储该输入,只需计算 CRC 并存储结果。

此模式是否是适合使用类方法的示例(如此链接中所述)?

http://www.attrs.org/en/stable/init.html#initialization

0 投票
1 回答
422 浏览

python-attrs - 使用带有可调用对象的 attr.asdict() 过滤器

我正在尝试在我的类上创建一个方法,该方法将只返回公共属性作为字典。我在语法上苦苦挣扎。这是我尝试失败的方法:

0 投票
4 回答
713 浏览

python - 如何在 asdict 中获取@property 方法?

我有类似的东西:

现在当我这样做时:

我想将其转换为 dict:

当我使用时,attr.asdict(f)我没有得到@property. 我只得到 {'max_count':2}.

实现上述目标的最干净方法是什么?

0 投票
1 回答
1226 浏览

python - python-attrs 中带有额外参数的自定义验证器

我有几个使用 attrs 定义的类,如下所示:

对于几个属性,我需要创建一个验证器来检查它是否在某个范围内的数据。我想避免重复,所以我可以创建一个自定义验证器,在其中我为 min 和 max 传递一些额外的参数,比如这个:

但是我不知道如何从 attrib() 内部调用这个验证器,传递额外的参数(min_value 和 max_value),我的意思是做一些类似的事情:

0 投票
2 回答
2658 浏览

python - 如何使用元组和字典解包但没有额外的方法制作 attrs 类

我刚开始使用attrs非常漂亮的python模块(或者类似地我们可以使用Python 3.7 DataClasses)。我有一个常见的使用模式是让类成为参数值的容器。我喜欢分配参数时的标签,以及更简洁的属性样式引用值,但我也喜欢在将值存储在有序 dict 之类的东西中时有一些很好的特性:

  1. *像 atuple或 a一样解包list以输入函数参数
  2. **当关键字传递是必要或可取的时解包。

我可以通过在类中添加三个方法来实现这一切

然后我可以使用这样的类:

这里的动机是数据类提供方便和清晰。但是,我不使用数据类来编写我要编写的模块是有原因的。希望函数调用应该接受简单的参数,而不是复杂的数据类。

上面的代码很好,但我想知道我是否遗漏了一些可以让我完全跳过编写函数的东西,因为模式很清楚。属性按我希望它们解包的顺序添加,并且可以根据关键字参数的属性名称读取为键值对。

也许这是这样的:

但我不确定是否有attrs我没有找到的东西本身可以做到这一点。另外,我不确定如何在添加属性时保持它们的顺序并将其转换为 keys 方法。

0 投票
1 回答
417 浏览

pycharm - 使用 attrs 对子类进行 Pycharm 类型提示

Pycharm 抱怨 MyClass 实例出现意外参数。有没有解决的办法?

0 投票
2 回答
556 浏览

python-attrs - 控制用 attrs 定义的派生类的 init 中的参数顺序

attrs生成方法的参数顺序由类中init属性定义的顺序+MRO(基于多重继承关系定义总顺序的标准方式)确定。这对我的用例不利,但似乎没有任何灵活性。这是用例:

attrs用来定义一些建模图形基元的类。这些原语是相关的,因为它们都需要数据来处理并生成具有给定高度和宽度的图形,这些图形具有默认值。所以在顶层有一个类

从中派生出三个类,UnivariateGraphics,BivariateGraphics并分别MultivariateGraphics使用一、两或更多列data。让我展示一个:

单变量情况仅具有x和多变量情况作为单个columns属性。这失败了,因为在 MROxy之后height,并且width但是xy是强制性的,而height不是width。确切的错误是

我可以为第一列和第二列设置默认值,xy顺序仍然是错误的。例如,如果想写类似的东西

第二个和第三个参数将被解释为heightand width,而不是xand y。我可以通过只设置关键字以外的所有属性来防止这个错误data,但我不支持这种语法。从阅读几个相关问题,例如#38,看来这是推荐的方法。关闭但没有雪茄。

另一种解决方法是独立地向每个派生类添加height和。width这将违反 DRY 原则,并且无法表达和执行类之间的这种共性。有超过三个类,它会变得非常讨厌。

这不仅仅是一个“学术”问题。我attrs在包中使用autosig, 来帮助以一致的方式定义 API。这又在统计图形包中使用,altair_recipes实际发生上述情况的地方(嗯,在下一个版本中,当我需要添加heightwidth到所有图形基元时)。

我可以向开发人员提出问题,但由于主要开发人员开玩笑地(?)威胁那些使用电击子类的人,我觉得这将是徒劳的。我会对不需要 DRY 违规或样板的非继承解决方案感兴趣。谢谢

0 投票
1 回答
450 浏览

python - pytest 在测试之间泄漏 attrs 对象

我正在尝试使用 attr 类的两个不同实例(从函数范围的夹具返回)作为输入参数在 pytest 中运行两个测试。第一个 msg 对象也出现在第二个测试中。我的例子:

两个测试之间的可变状态如何泄漏?