微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我可以简化从 Python 中的字符串类型派生的过程吗?

如何解决我可以简化从 Python 中的字符串类型派生的过程吗?

我从 str 派生以获得强类型字符串引用。它们看起来像下面,这是多余的,我想避免冗余:

class VarRef(str):
    def __new__(cls,*args,**kw):
        return str.__new__(cls,**kw)

class SceneRef(str):
    def __new__(cls,**kw)

class AmbienceRef(str):
    def __new__(cls,**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,它仅用于静态类型检查。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。