![](/img/trans.png)
[英]How can I simplify this conversion from underscore to camelcase in Python?
[英]Can I simplify deriving from a string type in Python?
我從str
派生以獲得強類型的字符串引用。 它們如下所示,是多余的,我想避免冗余:
class VarRef(str):
def __new__(cls, *args, **kw):
return str.__new__(cls, *args, **kw)
class SceneRef(str):
def __new__(cls, *args, **kw):
return str.__new__(cls, *args, **kw)
class AmbienceRef(str):
def __new__(cls, *args, **kw):
return str.__new__(cls, *args, **kw)
例如,這確保了我需要顯式強制轉換來獲取VarRef
,但否則它的功能就像一個字符串。
我還有更多,希望有一種方法可以為每個復制相同的__new__
構造函數。
我僅將這些用於 MyPy 類型檢查,因此在運行時如果它們是普通字符串就可以了。 如果有一種機制可以標記它們僅用於類型檢查,我很樂意使用這種方法。
使用NewType
聲明一個功能相同但名義上不同於基本類型的類型。
from typing import NewType
URL = NewType("URL", str)
fail: URL = "Hello World" # Incompatible types in assignment (expression has type "str", variable has type "URL")
docs: URL = URL("https://docs.python.org/3/library/typing.html")
請記住,對值的操作仍然像往常一樣定義,包括它們的類型。 例如, docs + '#newtype'
仍將生成str
而不是URL
。
你,你正在尋找typing.NewType
,所以在這里:
VarRef = typing.NewType("VarRef", str)
SceneRef = typing.NewType("SceneRef", str)
AmbienceRef = typing.NewType("AmbienceRef", str)
注意,在運行時,這只是返回它的參數,即str
,它僅用於 static 類型檢查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.