Python 相当于 Typescript 可索引类型?

Python's equivalence of Typescript's indexable type?

在打字稿中,有一个名为索引签名的构造,例如,让我表达特定对象的所有属性都具有字符串类型的值,即:

type Foo = { [key: string]: string }

如何在 Python 中键入类似提示,例如表示 class 的所有属性都应具有字符串类型的值?我想这样做的原因是因为我有一个 Python class 其属性事先不知道,但动态设置。

您的 Foo 类型的等价物是 dict,其键和值的类型均为 str:

Foo = dict[str, str]

如果您通过 __getattr__ 在自定义 class 上动态生成属性,__getattr__ 的签名决定了属性的类型:

class Foo:
    def __getattr__(self, name: str) -> str:
        return "foo"

f = Foo()
reveal_type(f.bar)  # note: Revealed type is "builtins.str"