__str__我有一個自定義列舉類,它在呼叫or時只能回傳一組特定的字串文字__repr__。鑒于這些序列化的字串文字有時用作其他函式的輸入(并且這些輸入是型別良好的,即僅限于正確的字串集),我希望__str__and的回傳型別__repr__比str.
考慮以下:
from typing import Literal
class A:
def __repr__(self) -> Literal["world"]:
result : Literal["world"] = "world"
return result
test_val : Literal["world"] = repr(A())
print(test_val)
以上應該可以作業,因為型別注釋是連貫的,但是使用 mypy,我得到:
playground.py:8: error: Incompatible types in assignment (expression has type "str", variable has type "Literal['world']")
對于我分配的行test_val。
我懷疑這可能是由于一些關于如何定義 dunder 方法型別的全域機制;并且__repr__總是會回傳一個字串。但是考慮到我可以選擇我的回傳型別__getitem__就好了,我認為其他的東西可能是可行的。
有沒有辦法強制 / 的回傳型別多載,__str__只要__repr__co/contra-variance、Liskov 等得到尊重?
uj5u.com熱心網友回復:
您的方法輸入正確,但您將repr和__repr__. A().__repr__()回傳一個Literal["world"]but repr,帶簽名
def repr(x: object) -> str: ...
總是回傳一個str
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/454385.html
