Python 属性验证器和 __attrs_post_init__() 未被调用

Python attrs validator and __attrs_post_init__() are not called

我使用 @attr.s 创建了一个 class 并定义了一个属性验证器和 attrs_post_init() 方法。我希望在实例化此 class 的对象时自动调用这些方法。但是这些似乎根本不会在 init().

之前或之后的任何时候被调用
import attr
from typeguard import typechecked
from typing import Any, Optional

@attr.s(auto_attribs=True, init=False)
class Entry:
    name: Optional[str] = attr.ib()

    @typechecked
    def __init__(
        self, name: Optional[str] = None
    ):
        print("Entered init")
        self.name = name

    @name.validator
    def name_validator(self, _attribute: Any, value: Optional[str]) -> None:
        print("Entered validator")

    def __attrs_post_init__(self) -> None:
        print("Entered post")
        
Entry("Bob")

这只会打印 Entered init.

何时调用属性验证器和 attrs_post_init() 方法?

attrs 无法在对象构造时执行工作,除非您让它处理对象构造。您期望发生的事情通常会在生成的 __init__ 方法中发生,但您将其关闭。

通过拒绝生成的 __init__ 并实施您自己的, 已经承担了这些任务的责任。如果您想要验证, 需要这样做。如果你想__attrs_post_init__被调用,需要调用它。