擅长:python、mysql、java
<p>如果我的解释是正确的,你想要的是:</p>
<pre><code>from typing import Dict, Optional
import attr
from attr.validators import optional, instance_of
@attr.s
class A(object):
a_dict = attr.ib(
factory=dict,
type=Optional[Dict[str, "A"]],
validator=optional(instance_of(dict))
)
A({"key": A(None)})
</code></pre>
<p>然后我就过去了。在</p>
<p>请注意:</p>
<ul>
<li>不能将<code>typing.Dict</code>用于<code>factory</code>,因为它实际上只是用于类型提示,如果尝试实例化它,则会失败。在</li>
<li><code>instance_of</code>在内部使用<code>isinstance()</code>,虽然<code>isinstance({}, Dict)</code>是真的,但我不认为它是这样使用的。在</li>
<li>如果根据验证器,一个dict是可选的,那么还需要使用类型注释将其包装在<code>Optional[]</code>中来声明它是可选的。在</li>
</ul>