首页 > 解决方案 > 使用额外的自定义方法创建一个列表,在 python 3.8 但不是 3.9 中出现错误

问题描述

我正在尝试创建一个类对象,它本质上是一个由给定 TypedDict 格式化的字典列表。出席类示例如下所示:

from typing import TypedDict, List, get_args


class Database(List):

    def __init__(self, *args):
        super().__init__(args)
        self.name = self.__class__.__name__

    def add_entry(self, entry: dict, **kwargs) -> dict:
        for key, value in kwargs.items():
            entry[key] = value
        self.append(entry)
        return entry

    def search(self, lastest=True, **kwargs) -> dict:
        <method stuff>


class Attending(TypedDict):
    attending_username: str
    attending_email: str
    attending_phone: str


class Attendings(Database[Attending]):
    pass


attendings = Attendings()

这在 3.9 中有效,但在 3.8 中它给了我以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\Jakda\pyfiles\class\repos\heart-rate-sentinel-server-richardson-reyes\database.py", line 51, in <module>
    class Attendings(Database[Attending]):
  File "C:\Users\Jakda\.conda\envs\serv\lib\typing.py", line 261, in inner
    return func(*args, **kwds)
  File "C:\Users\Jakda\.conda\envs\serv\lib\typing.py", line 897, in __class_getitem__
    _check_generic(cls, params)
  File "C:\Users\Jakda\.conda\envs\serv\lib\typing.py", line 211, in _check_generic
    raise TypeError(f"{cls} is not a generic class")
TypeError: <class 'database.Database'> is not a generic class 

我对课程有点陌生,所以我真的不明白这里发生了什么。有没有更好的方法来写这个?为什么要检查这是否是泛型类?

标签: pythonpython-3.xlisttypingpython-class

解决方案


推荐阅读