当函数参数默认为空列表/无时,如何避免几乎重复的无信息类型提示

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

空列表作为默认参数是 python 中的一个陷阱,并且将类型提示添加到

=None
的常用模式作为默认值会使它们变得非常混乱。

有什么方法可以避免在此示例代码中给出两次(甚至一次?)类型提示:

class Telly:
    def __init__(penguin: Optional[list[str]] = None):  # <-- This type is ugly and adds negative value
        self.penguin: list[str] = penguin or []         # <-- Could this type be inferred?

(示例来自 https://docs.python.org/3/reference/compound_stmts.html#function-definitions

  1. 是否有办法避免参数类型提示的
    Optional
    部分?
  2. 任何一个类型提示都可以从另一个类型提示中推断出来吗?

例如,如果有某种特殊类型的默认参数每次都会生成一个新的空列表,或者至少隐藏类型提示的丑陋之处

class Telly:
    def __init__(penguin=EmptyList[str]): 
        self.penguin = penguin or []

这样的事情可能吗?

python mypy python-typing
1个回答
0
投票

您可以创建一个隐藏可选的类型,例如:

from typing import Optional, TypeVar

T = TypeVar("T")
EmptyList = Optional[list[T]]


class Telly:

    def __init__(self, penguin: EmptyList[str] = None):
        self.penguin = penguin or []

    def whats_on(self) -> list[str]:
        self.penguin.append("property of the zoo")
        return self.penguin
© www.soinside.com 2019 - 2024. All rights reserved.