gpt4 book ai didi

Python 类型支持 not-None "late"变量

转载 作者:行者123 更新时间:2023-12-05 02:40:16 34 4
gpt4 key购买 nike

Dart 有“late variables”,swift 有“Implicitly Unwrapped Optionals”。

Python 有类似的东西吗?

这意味着,像 myvar: Late[str] = None 这样的东西表明我知道以后对 myvar 的所有访问都将在它初始化为非 None 值之后进行。

我的用例:

@dataclass
class Flag:
name: Optional[str] = dataclasses.field(init=False, default=None)
default_value: Any
value_type: Type
description: str = ""

Flag.name 由“友元”类初始化,所有对 Flag 的访问都是通过该友元类进行的,因此请确保在该模块之外的所有访问都不是对 Optional 的访问,而是对实际 str 的访问。

最佳答案

Python 没有声明,只有定义。你可以这样写

# *Looks* like a declaration, but does not create a variable
# named myvar, only annotates the name.
myvar: str

它告诉任何静态类型检查器 myvar 在最终使用时将具有 str 值,但实际上尚未创建变量。除了可能更新全局 __annotations__ dict 之外,注释本身在运行时没有任何意义。

稍后,像 myvar = "foo" 这样的初始赋值将被静态类型检查器接受,但像 myvar = 1 这样的初始赋值将被拒绝。


在 Python 中很少需要这种未分配的注释名称。它们最大的用途是在由 dataclass 装饰的 class 语句的主体中,它允许您为类的实例定义实例属性。 (此信息在生成 __init__ 等方法时会用到。)

@dataclass
class Foo:
x: int
y: str = "foo"
z = 3

类型本身并不是特别重要;它是导致 dataclass 生成 __init__ 方法的类型的存在

def __init__(self, x: int, y: str = "foo"):
self.x = x
self.y = y

未注解的名称z被当作一个普通的类属性。

关于Python 类型支持 not-None "late"变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68640751/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com