gpt4 book ai didi

Python attrs library : define attr. ib(default=) 使用其他属性

转载 作者:太空宇宙 更新时间:2023-11-04 02:55:00 57 4
gpt4 key购买 nike

我正在使用令人惊叹的 attrs 库以一种非常优雅的方式定义许多对象属性,到目前为止它一直运行得非常棒。

我目前遇到的唯一问题是,有时我想通过引用其他 attr.ib() 属性来定义默认值。如果 name 的默认值是静态字符串,下面是一些代码:

import attr
from attr.validators import instance_of
import datetime

@attr.s
class Something:
some_date = attr.ib(validator=instance_of(datetime.date))
some_number = attr.ib(convert=float)
name = attr.ib(validator=instance_of(str),
default="Generic Name {0} - {1}%".format(
some_date.strftime("%d-%b-%Y"),
some_number * 100)
)

something_instance = Something(some_date=datetime.date.today(), some_number=0.375)

问题是 name 看不到 floatdate,而是 _CountingAttr 对象,因此我得到了一个 AttributeError(和一个 TypeError for some_number * 100)。由于我也无法引用 self,我该怎么做?

最佳答案

所以目前使用 default 关键字似乎是不可能的。但是,要达到相同的效果,可以使用 __attrs_post_init__ 方法,该方法可用于在实例初始化后执行任意计算:http://attrs.readthedocs.io/en/stable/examples.html?highlight=attrs_post_init#other-goodies

在我的示例中,基本上可以归结为添加

def __attrs_post_init__(self):
if self.name is None:
self.name = "Generic Name {0} - {1}%".format(
self.some_date.strftime("%d-%b-%Y"),
self.some_number * 100)

感谢 attrs github 问题跟踪器为我指明了正确的方向。

关于Python attrs library : define attr. ib(default=) 使用其他属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42672653/

57 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com