如何在Python中键入嵌套对象的提示?

问题描述 投票:2回答:1

我目前正在与WSDL集成,因此决定使用Zeep库与Python一起使用。

我试图在响应上使用mypy进行类型提示,以便它可与VSCode的Intellisense一起使用,并且我不会进行粗心的分配或修改。但是,当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"

对于尝试1,原因很明显。但是尝试了尝试2之后,我不知道该如何继续了。我在这里想念什么?

更新:在@Avi Kaminetzky的answer之后,我尝试了以下操作:

accounts = TypedDict("accounts", {"accounts": List[AccountType]})
class getAccounts(TypedDict):
    result: MethodResultType
    accounts: accounts

但是当我的代码具有"getAccounts" has no attribute "result"时,我从mypy收到错误消息:accountResponse.result。>

我目前正在与WSDL集成,因此决定使用Zeep库与Python一起使用。我试图对响应的mypy进行类型提示,以便它与VSCode的...

python python-3.x type-hinting mypy zeep
1个回答
1
投票

您的第一次尝试很好,但是您将需要每个类都是TypedDict的子类。类似于class Foo(TypedDict)

© www.soinside.com 2019 - 2024. All rights reserved.