我有以下代码,其中我使用函数和变量模板定义虚拟虚拟类。我正在尝试使用
Protocol
进行类型提示。
使用 mypy
分析时出现以下错误:
$mypy --ignore-missing-imports --no-strict-optional --no-implicit-optional --explicit-package-bases --namespace-packages tmp.py
tmp.py:4: error: Only concrete class can be given where "Type[Person]" is expected
Found 1 error in 1 file (checked 1 source file)
我是新来的。有人可以帮我吗?
# -*- coding: utf-8 -*-
"""
Created on Wed Apr 12 14:12:27 2023
@author: alankar
"""
import numpy as np
from dataclasses import dataclass
from typing import Protocol, Optional, Union
@dataclass
class dm_halo(Protocol):
r0: Optional[float] = None
UNIT_LENGTH: Optional[float] = None
@dataclass
class unmodified_field(Protocol):
Halo: Optional["dm_halo"] = None
rCGM: Optional[float] = None
metallicity: Optional[np.ndarray] = None
UNIT_LENGTH: Optional[float] = None
def ProfileGen(self, radius: Union[float, int, list[float], list[int], np.ndarray]):
pass
@dataclass
class modified_field(Protocol):
ionization: Optional[float] = None
redshift: Optional[float] = None
unmodfied: Optional["unmodified_field"] = None
UNIT_LENGTH: Optional[float] = None
TempDist: Optional[np.ndarray] = None
Tcut: Optional[np.ndarray] = None
prs_hot: Optional[np.ndarray] = None
prs_warm: Optional[np.ndarray] = None
nhot_local: Optional[np.ndarray] = None
sigH: Optional[float] = None
sigW: Optional[float] = None
TmedVW: Optional[float] = None
TmedVH: Optional[float] = None
nHhot_local: Optional[np.ndarray] = None
nHwarm_local: Optional[np.ndarray] = None
fvw: Optional[np.ndarray] = None
def ProfileGen(self, radius: Union[float, int, list[float], list[int], np.ndarray]):
pass
编辑: 道歉!我正在尝试一个更简单的案例来解决类似的问题。这是此代码特有的错误:
$ mypy --ignore-missing-imports --no-strict-optional --no-implicit-optional --explicit-package-bases --namespace-packages ./tmp.py
tmp.py:5: error: Only concrete class can be given where "Type[dm_halo]" is expected
tmp.py:10: error: Only concrete class can be given where "Type[unmodified_field]" is expected
tmp.py:20: error: Only concrete class can be given where "Type[modified_field]" is expected
Found 3 errors in 1 file (checked 1 source file)