Type hint for List that contains a namedtuple
我在这里读过,但它是关于名字的提示。
是否可以为包含
例如:
1 2 3 4 5 6 | firefoxprofile = namedtuple("Profile", ["Name","Path","isRelative","Default"]) # Will contain a list of tuples that represent the firefox profiles. ffprofiles = [] # -- how would I write the type hint? ffprofiles.append(Profile(Name='Jason', Path='Profiles/er5rtak4.Jason', isRelative='1', Default=None)) ffprofiles.append(Profile(Name='Sarah', Path='Profiles/23mvfqcj.Sarah', isRelative='1', Default=None)) |
我尝试过:
1 | ffprofiles = List[namedtuple("Profile", ["Name","Path","isRelative","Default"])] |
号
但这不起作用,当我试图用该语法更新
1 | TypeError: descriptor 'append' requires a 'list' object but received a 'Profile' |
您不必拼写命名的元组,只需引用您的
1 | List[firefoxprofile] |
在赋值中使用时,请将类型提示放在冒号之后,但在
1 | ffprofiles: List[firefoxprofile] = [] |
号
这会将
您将由
但是,您可能还希望使用
1 2 3 4 5 6 7 8 9 10 11 12 | from typing import Optional, NamedTuple, List class FirefoxProfile(NamedTuple): name: str path: str is_relative: bool default: Optional[str] ffprofiles: List[FirefoxProfile] = [ FirefoxProfile('Jason', 'Profiles/er5rtak4.Jason', True, None), # ... and more ] |
定义一个属于
现在,这种类型的暗示机器将对所期望的有更多的了解。现在不仅可以清楚地知道列表将包含哪种类型的实例,上面还记录了命名的tuple类支持哪些属性以及这些属性的类型。我对这些类型可能是什么做了一些有根据的猜测。我在这里还使用了python的pep-8样式约定的名称,因此命名的tuple属性都使用小写的_和下划线("snake_case"),而不是camelcase。后者应该只用于类名。