如何在Python中为自定义类对象列表添加类型注解?
问题解答
首先明确:person[]这种写法在Python类型提示里是不合法的,正确表示Person对象列表的方式是list[Person]。
你问的people: Person | list[Person]是完全可以的——这是Python 3.10及以上版本支持的联合类型写法,用来表示这个参数既可以接收单个Person对象,也可以接收Person对象的列表。
如果你的Python版本低于3.10,就需要从typing模块导入Union,写成people: Union[Person, list[Person]]。
另外补充个规范建议:Python类名按照PEP8应该用大驼峰命名,也就是把person改成Person,group改成Group,代码可读性会更好。
修正后的示例代码:
# Python 3.10+版本写法 class Person: def __init__(self, fname: str, lname: str): self.fname = fname self.lname = lname class Group: def __init__(self, groupName: str, people: Person | list[Person]): self.groupName = groupName # 可选:统一把单个对象转成列表,避免后续处理分支 if isinstance(people, Person): self.people = [people] else: self.people = people
如果是Python 3.9及以下版本:
from typing import Union, List class Person: def __init__(self, fname: str, lname: str): self.fname = fname self.lname = lname class Group: def __init__(self, groupName: str, people: Union[Person, List[Person]]): self.groupName = groupName if isinstance(people, Person): self.people = [people] else: self.people = people
内容的提问来源于stack exchange,提问作者Just Works
相关产品推荐
相关产品推荐

