具有元组[Union[…]的意外类型

2024-09-26 22:54:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我如何指定一个元组可以具有我指定类型的任何值的类型

例如:

    def _get_writable_values(self, *, username: str, password: str) -> Tuple[WritableValue]:
        h = md5()
        h.update(username.encode(DEFAULT_ENCODING) + password.encode(DEFAULT_ENCODING))
        concatenated_hash = h.hexdigest()
        return (
            username,
            password,
            182,  # ???
            concatenated_hash,
            157,  # ???
        )

我得到这个错误:

Expected type 'Tuple[Union[str, int, bytes]]', got 'Tuple[str, str, int, str, int]' instead.

WritableValue的定义如下:

WritableValue = Union[str, int, bytes]

我不想覆盖每个子类的类型签名,我的用例的正确签名是什么


Tags: default类型bytesusernamepasswordhashencodingencode
2条回答

在本例中,您知道元组应该包含什么。正确的做法是函数声明它。如果在将来的某个时候,您意外地更改了元组中某个元素的类型,您希望尽快了解该元素的类型—即在编译类型(静态代码分析)中更改,而不是在运行时更改

因此,我建议的解决办法如下:

def _get_writable_values(<arguments go here>) -> Tuple[str, str, int, str, int]:
    ...

事实证明,你可以用点来表示:

def _get_writable_values(self, *, username: str, password: str) -> Tuple[WritableValue, ...]:

相关问题 更多 >

    热门问题