使类的常量成为其类型所在的类

布伦特

我有一个带有特殊值“ EMPTY”和“ UNIVERSE”的Python类:

class RealSet:
    """Continuous open, half-open, and closed regions and discreet values of the Reals"""

    # implementation placeholder
    def __init__(self, intervals, *, canonicalize):
        pass

# Outside the class

RealSet.EMPTY = RealSet(tuple(), canonicalize=False)  # type: ignore
RealSet.UNIVERSE = RealSet(((None, None),), canonicalize=False)  # type: ignore

但是,棉绒,代码完成等不喜欢这种方式,因为它们不被视为类的静态属性。甚至设置它们也被报告为mypy错误,因此# type: ignore

下面的方法不起作用,因为我不能RealSet在类范围内构造a ,因为它尚不存在:

class RealSet:
    """Continuous open, half-open, and closed regions and discreet values of the Reals"""
    ...
    ...

    EMPTY = RealSet(tuple(), canonicalize=False)  # error
    UNIVERSE = RealSet(((None, None),), canonicalize=False)  # error

而且这不起作用,因为它定义了实例属性,而不是类属性:

class RealSet:
    """Continuous open, half-open, and closed regions and discreet values of the Reals"""
    ...
    ...

    EMPTY: "RealSet"
    UNIVERSE: "RealSet"

# Outside the class

RealSet.EMPTY = RealSet(tuple(), canonicalize=False)
RealSet.UNIVERSE = RealSet(((None, None),), canonicalize=False)

这似乎是Python类设计中的一个极端案例。如何在属性的类型为其所在类的地方创建类属性?奖励:使它们恒定。

客人

您可以typing.ClassVar用来注释类变量:

class RealSet:
    def __init__(self, intervals, *, canonicalize):
        pass

    EMPTY: ClassVar['RealSet']
    UNIVERSE: ClassVar['RealSet']


RealSet.EMPTY = RealSet(tuple(), canonicalize=False)
RealSet.UNIVERSE = RealSet(((None, None),), canonicalize=False)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

自定义类的const实例化是否也使类常量成为“一切”?

来自分类Dev

初始化类的静态常量成员,其中成员是私有类型?

来自分类Dev

使类类型成为特定类

来自分类Dev

使字符串变量成为C ++中的类名

来自分类Dev

在继承的类中重新定义常量成员变量

来自分类Dev

在继承的类中重新定义常量成员变量

来自分类Dev

在类中常量成员的初始化

来自分类Dev

如何使用$ _SERVER superglobals定义类的常量成员?

来自分类Dev

变量成类名

来自分类Dev

如何使成员函数或特定类的变量成为别名(例如STL容器)

来自分类Dev

在类中使es6变量成为全局变量

来自分类Dev

使类类型成为字典键(Equatable,Hashable)

来自分类Dev

使约束函数成为类型类实例

来自分类Dev

使类类型成为字典键(Equatable,Hashable)

来自分类Dev

私有类型的静态常量成员

来自分类Dev

在抽象基类中声明静态,常量成员,将其分配给派生类中的值?

来自分类Dev

包含常量类型模板的类的模板?

来自分类Dev

常量类与全局常量

来自分类Dev

Java常量常量类

来自分类Dev

如何将对A类的非常量公共成员m的访问权限限制为包含A作为非常量成员的另一个B类的const?

来自分类Dev

包含其自身类型属性的 Swift 类

来自分类Dev

类型类和实例:模式参数成为列表-是否?

来自分类Dev

Typescript - 使函数返回类型成为接口实现的类

来自分类Dev

无法访问类的向量成员

来自分类Dev

创建我所在类的对象

来自分类Dev

PHP:输入参数的类型声明中的类常量

来自分类Dev

类型为<T>的类,其类型为<T>的可为空

来自分类Dev

泛型类型,其类型参数是抽象基类

来自分类Dev

如何实现类常量?

Related 相关文章

热门标签

归档