<p>看起来您正在尝试访问类而不是实例</p>
<p>这里有一种方法:</p>
<pre class="lang-py prettyprint-override"><code>from pydantic import BaseModel
from typing import List
class Mail(BaseModel):
mailid: int
email: str
one_mail = {"mailid": 1, "email": "aeajhs@gmail.com"}
mail = Mail(**one_mail)
print(mail)
# mailid=1 email='aeajhs@gmail.com'
</code></pre>
<p>有了这些,让我们调整<code>User</code>模型:</p>
<pre class="lang-py prettyprint-override"><code>class User(BaseModel):
id: int
name: str
mails: List[Mail]
data = {
"id": 123,
"name": "Jane Doe",
"mails":[
{"mailid": 1, "email": "aeajhs@gmail.com"},
{"mailid": 2, "email": "aeajhsds@gmail.com"}
]
}
userobj = User(**data)
print(userobj.mails)
# [Mail(mailid=1, email='aeajhs@gmail.com'), Mail(mailid=2, email='aeajhsds@gmail.com')]
</code></pre>
<p>如果您只需要其中一个电子邮件地址,则需要指定其中一个,例如:</p>
<pre class="lang-py prettyprint-override"><code>print(userobj.mails[0].email)
# aeajhs@gmail.com
</code></pre>
<p>为了获得所有电子邮件地址的列表,您需要迭代<code>mails</code>,例如:</p>
<pre class="lang-py prettyprint-override"><code>print([mail.email for mail in userobj.mails])
# ['aeajhs@gmail.com', 'aeajhsds@gmail.com']
</code></pre>
<p>作为旁注:Pydantic支持<a href="https://pydantic-docs.helpmanual.io/usage/types/#pydantic-types" rel="nofollow noreferrer">email string validation</a></p>