问题标签 [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.
python - 类型注释但跳过 auto_attribs 类中的类属性
我目前正在使用attrs
. 这是一个树状结构,我需要一个父反向链接用于某些目的。OTOH,我想使用冻结的类(有缓存的属性,它们依赖于只读状态)。
这意味着树必须自下而上,在父级之前的子级实例化。为了解决这个问题,我发明了一种特殊的 weakref 对象,它可以被惰性绑定一次。
有自定义初始化代码在子级中创建一个未绑定的引用,并将它们绑定在父级中:
Child.parent
由于child
. _ 以前我把它作为一个自定义工厂的类属性,但后来它变成了一个-属性attrs
,它真的不应该是。例如,我不希望parent
在散列、比较、str 表示等中出现。
代码已经可以工作了,但是:如您所见,我想尽可能地做正确的事情并进行类型注释。直接parent
放入__dict__
意味着通常的工具不知道预期的类型。事实上,他们甚至可能会抱怨该parent
属性根本不存在。
长话短说:有没有办法parent
用类型注释声明为类属性,同时告诉attr.s
跳过/忽略它?还是我忽略了另一种解决方案?
编辑:即如何使静态类型检查器识别parent
属性的类型,而不使其成为attr.ib
.
python - 当属性是另一个 attrs 对象时进行属性验证检查
我有两个 attrs 类,其中一个是另一个的属性。我想确保如果给一个特定的值,那么另一个有一个特定的值。
我看过验证器,认为没有任何东西可以捕捉到这一点。
这是我写的:
我认为这行得通,但我觉得我可能遗漏了一些明显的东西。
python - 如何避免 attrs 自定义验证函数中的“方法可能是函数”警告
给定以下代码:
运行pylint check.py
将返回:
授予此代码是一个非常人为的示例,但我不确定我应该如何更改代码以取悦此消息?
编辑
以下工作要忽略:
python - Attrs 依赖于初始化的属性
假设我们有一个attrs
类:
所以以下行为是正确的:
但这不是:
这显然会发生,因为Foo.b
无论何时Foo.a
给定值,总是被初始化:通过默认值或 on Foo.__init__
。
无论如何,是否可以使用任何初始化挂钩来完成此属性依赖?
python - 如何忽略pydantic中的字段repr?
当我想使用 attr 库忽略某些字段时,我可以使用repr=False
选项。
但是我在 pydantic 中找不到类似的选项
请看示例代码
但是,这并不意味着根本没有选项,我可以使用语法print(a.dict(exclude={"boo"}))
pydantic 没有类似的选项repr=False
吗?
python-attrs - 属性的初始化顺序令人困惑
我一直在通过以下方式使用 attrs:
当我运行代码时,我显然得到了一个错误。
但是,对我来说不直观的部分是Foo
该类的验证器引发了错误。
我可能是错的,但据此我假设x
属性的验证器Bar
出现在Foo
's 之后。
这是为什么?Bar
在将' 的x
属性作为参数传递给Foo
' 的 init 方法之前验证它不是更有意义吗?
提前致谢!
python - 使用 cattr/attr 从 dict 构造一个对象,默认设置为 None
我想使用从字典重新创建我的对象,cattr
但看起来这不适用于设置为的嵌套字段None
。
这是一个解释问题的代码示例:
现在,如果 Iry 使用以下方法构造我的对象:
我收到以下错误:
一种解决方法是在调用结构之前从字典中删除 None 字段:
我需要这样做吗?或者有更简单的解决方案
任何帮助深表感谢。
python-3.6 - 覆盖继承的默认属性方法
刚开始学习attrs
和dataclass
。
Shape
我有以下Rectangle
课程来说明我的问题。在我覆盖rect_length_default
子类中的实现之前,代码工作正常。
我的问题:为default
超类中定义的属性覆盖修饰方法的正确方法是什么?
输出:
python - 使用 attrs 创建具有互斥参数的 Python 类
我有一个有两个互斥参数(prices
和returns
)的类。也就是说,不能同时提供它们以实例化对象。
但是,该类需要两者进行内部计算。所以我想计算pd.Series
用户提供的缺失值。
我创建了两个替代类构造函数(from_prices
和from_returns
)。使用这些构造函数,该类将被正确实例化。
这是代码。它利用了attrs
库 ( www.attrs.org )。
obj = MutuallyExclusive(prices, returns)
但是,即使这两个系列彼此不兼容,用户仍然可以调用。捕捉这种情况并引发错误的最佳方法是什么?
编辑:
是否可以一起“禁用”常规构造函数?如果可以仅通过替代构造函数实例化对象,这将解决问题,不是吗?
python - attrs 包是否有“on_getattr”等效功能?
我为我的实体使用attrs包,在大多数情况下它就像一个魅力。我面临的一个问题是为属性定义getter(通常在纯python中@property是goto)
for setterattrs
有一个方便的参数on_setattr
,其工作方式如下:
它使我们免于@name.setter
在任何情况下几乎使用(至少在我的经验中)
但是,当我们在返回属性时有一些逻辑时,当然,我们不能使用:
因为它将覆盖我们 attrs 名称的原始定义。所以我想知道在attrs
这种情况下是否有任何内置方法,或者如果没有其他解决方案,除了定义另一个具有不同名称的属性,即
更新
一个解决方案是使用/覆盖__getattribute__
attr 来添加类似的逻辑:
但最终,它会被大量 if/switch 块污染,更重要的是会与内置函数混淆__repr__