`mypy` 将协议与数据类一起使用时出错

问题描述 投票:0回答:0

我有以下代码,其中我使用函数和变量模板定义虚拟虚拟类。我正在尝试使用

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)
python python-3.x type-hinting mypy python-dataclasses
© www.soinside.com 2019 - 2024. All rights reserved.