日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python应用程序类型_python – 类型提示条件可变参数应用程序

發布時間:2023/12/15 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python应用程序类型_python – 类型提示条件可变参数应用程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我試圖鍵入提示構造函數的部分應用程序,一旦提供“tag”實例,它就會被完全應用.這是通過包裝類實現的,包裝類存儲構造函數和任何部分應用的參數.由于包裝器適用于多種類型,因此必須采用variadic * args.

這會產生兩種情況,它們所采用的參數不同:

>申請:(標簽:標簽,……) – > CLS

>商店:( …) – >部分[CLS]

值得注意的是,2.情況可能會或可能不會接收第一個參數.它們都是重疊的,因為它們是可變的.這很容易實現.我試圖使用@overload鍵入提示:

from typing import TypeVar, Generic

#: the class to partially construct

Cls = TypeVar('Cls')

class Tag:

"""Instances of this class complete the partial application"""

class Partial(Generic[Cls]):

"""Partially construct ``ctor`` until a :py:class:`~.Tag` is applied"""

def __init__(self, ctor: Type[Cls], *args):

self.ctor = ctor

self.args = args

# type hints

@overload

def __call__(self, tag: Tag, *args) -> Cls:

...

@overload

def __call__(self, *args) -> 'Partial[Cls]':

...

# implementation

def __call__(self, *args):

if args and isinstance(args[0], Tag):

return self.ctor(args[0], *self.args, *args[1:])

return Partial(self.ctor, *self.args, *args)

然而,mypy和PyCharm都不滿意這一點(PyCharm目前需要一個顯式方法調用,但這不是我的問題).使用顯式非標記擴展第二個重載(標記:Any,…) – >部分[Cls]無法解決問題.這兩種工具都會報告類型不匹配,不兼容的重載,或者回退到Any或Union.

任何關于類型提示正確的幫助是值得贊賞的.

鍵入檢查代碼示例:

class VariadicString(str):

def __new__(cls, *args):

return str(args)

a = RecursivePartial(VariadicString, 1, 2, 3)

b = a(4, 5, 6)

c = b(Tag(), 7, 8, 9)

reveal_locals() # absent for PyCharm

mypy正確識別a,b和c的類型,但由于不兼容的重載重疊而拒絕該程序:

test.py:17: error: Overloaded function signatures 1 and 2 overlap with incompatible return types

test.py:38: error: Revealed local types are:

test.py:38: error: a: test.Partial[test.VariadicString*]

test.py:38: error: b: test,Partial[test.VariadicString*]

test.py:38: error: c: test.VariadicString*

PyCharm不拒絕該程序,但錯誤地將c標識為兩種返回類型的聯合:

a: Partial[VariadicString]

b: Partial[VariadicString]

c: Union[VariadicString, Partial[VariadicString]]

總結

以上是生活随笔為你收集整理的python应用程序类型_python – 类型提示条件可变参数应用程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。