Sza*_*lcs 6 type-hinting python-3.x
我想创建一个函数签名,其中undefinedvalue 和None彼此不同。
所以例如:
undefined = object()
def update(id: str, title: str = undefined, description: str):
data = {
"title": title,
"description": description,
}
// remove undefined key-value pairs from data
for key in data.keys():
if data[key] is undefined:
del data[key]
# send data to the server for further processing
Run Code Online (Sandbox Code Playgroud)
显然,这样我会得到冲突的类型和以下错误:Incompatible default for argument "description" (default has type "object", argument has type "str")
从上面的例子可以看出,传递None是完全有效的,因为它将被替换为nullJSON 的值,而如果undefined传递则不会在数据中考虑该值。
我尝试定义未定义的类型,例如:
UndefinedStr = typing.Union[str, undefined]
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:Variable "undefined" is not valid as a type
我想那是因为这undefined是一个例子。因此,作为一种解决方法,我可以这样做:
class Undefined:
pass
undefined = Undefined()
UndefinedStr = Union[str, Undefined]
Run Code Online (Sandbox Code Playgroud)
这个解决方案有效,但对我来说感觉有点太宽泛了。
所以我的问题是输入提示这个未定义用例的最佳方法是什么?
更新:
请不要关注以下事实:在示例中参数的类型title是str,这个问题背后的主要目的是为可以与任何其他类型联合使用的哨兵对象找到通用类型提示。
与此同时,我在PEP-0661中看到了这个特定问题的一些进展,因此似乎这已成为一个更广泛的讨论主题。
| 归档时间: |
|
| 查看次数: |
1137 次 |
| 最近记录: |