空列表作为默认参数是 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)
Optional
部分?例如,如果有某种特殊类型的默认参数每次都会生成一个新的空列表,或者至少隐藏类型提示的丑陋之处
class Telly:
def __init__(penguin=EmptyList[str]):
self.penguin = penguin or []
这样的事情可能吗?
您可以创建一个隐藏可选的类型,例如:
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