作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在与 WSDL 进行集成,因此决定使用 Zeep 库与 Python 一起使用。
我正在尝试使用 mypy
对响应进行建模, 这样它就可以与 VSCode 的 Intellisense 一起使用,并且在我进行粗心的分配或修改时给我一些提示。但是当 WSDL 响应位于嵌套对象中时,我遇到了障碍,我想不出一种方法来输入提示。
来自 WSDL 的示例响应:
{
'result': {
'code': '1',
'description': 'Success',
'errorUUID': None
},
'accounts': {
'accounts': [
{
'accountId': 1,
'accountName': 'Ming',
'availableCredit': 1
}
]
}
}
class MethodResultType:
code: str
description: str
errorUUID: str
class AccountType:
accountId: int
accountName: str
availableCredit: float
class getAccounts:
result: MethodResultType
accounts: List[AccountType] # Attempt 1
accounts = TypedDict("accounts", {"accounts": List[AccountType]}) # Attempt 2
client = Client(os.getenv("API_URL"), wsse=user_name_token)
accountsResponse: getAccounts = client.service.getAccounts()
accounts = accountsResponse.accounts.accounts
# Attempt 1: "List[AccountType]" has no attribute "accounts"; maybe "count"?
# Attempt 2: "Type[accounts]" has no attribute "accounts"
from typing import List, TypedDict, Optional, Dict
class MethodResultType(TypedDict):
code: str
description: str
errorUUID: Optional[str]
class AccountType(TypedDict):
accountId: int
accountName: str
availableCredit: float
class getAccounts(TypedDict):
result: MethodResultType
accounts: Dict[str, List[AccountType]]
result: getAccounts = {
'result': {
'code': '1',
'description': 'Success',
'errorUUID': None
},
'accounts': {
'accounts': [
{
'accountId': 1,
'accountName': 'Ming',
'availableCredit': 1
}
]
}
}
print(result.result)
print(result.accounts)
"getAccounts" has no attribute "result"
"getAccounts" has no attribute "accounts"
最佳答案
来自评论中对话的更新
class Foo(TypedDict)
. errorUUID
是 Optional[str]
. accounts
是类型 Dict[str, List[AccountType]]
因为它有一个内部(可能是冗余的)键,也称为 accounts
. accountsResponse['accounts']['accounts']
. from typing import List, TypedDict, Optional, Dict
class MethodResultType(TypedDict):
code: str
description: str
errorUUID: Optional[str]
class AccountType(TypedDict):
accountId: int
accountName: str
availableCredit: float
class getAccounts(TypedDict):
result: MethodResultType
accounts: Dict[str, List[AccountType]]
result: getAccounts = {
'result': {
'code': '1',
'description': 'Success',
'errorUUID': None
},
'accounts': {
'accounts': [
{
'accountId': 1,
'accountName': 'Ming',
'availableCredit': 1
}
]
}
}
from typing_extensions import TypedDict
.
关于python - 如何在 Python 中对嵌套对象进行类型提示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59498869/
我是一名优秀的程序员,十分优秀!