簡體   English   中英

當屬性是另一個 attrs 對象時的 Attrs 驗證檢查

[英]Attrs validation checking when an attribute is another attrs object

我有兩個 attrs 類,其中一個是另一個的屬性。 我想確保如果給一個特定的值,另一個值也有特定的值。

我看過驗證器,並認為沒有任何東西可以捕捉到這一點。

這是我寫的:

@attr.s
class C:
    a = attr.ib(validator=attr.validators.instance_of(str))

@attr.s
class D:
    x = attr.ib(validator=attr.validators.instance_of(str))
    z = attr.ib(validator=attr.validators.instance_of(C))

    def __attrs_post_init__(self):
        if self.x == "a":
            assert self.z.a == "a12"
        elif self.x == "b":
            assert self.z.a == "b12"
        elif self.x == "c":
            assert self.z.a == "c12"


d = D(x="a", z=C("a12"))

我認為這有效,但我覺得我可能遺漏了一些明顯的東西。

您的方法很好,除了您可能不應該在生產代碼中使用assert (它們在您運行python -O時得到優化)。

如果z 在x之后,您還可以使用裝飾器驗證器,將部分初始化的實例作為參數,但我發現您的解決方案更可靠,因為它不依賴於屬性定義的順序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM