[英]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.