当python代码中存在@dataclasses.dataclass或者@dataclass的时候直接cythonize会有问题,需要手动将__annotations__
属性添加到类中,或者自己去定义__init__函数而不是让@dataclasses.dataclass帮你初始化,否则有可能出现
TypeError: 'accessed_attrs' is a field but has no type annotation或者参数不匹配的错误。
例如,需要将
from dataclasses import dataclass, field
from typing import Dict, Any, List
@dataclass
class dataclass_test:
ddict: Dict[str, Any]
sstr: str
bbool: bool
llist: List[str]
ffloat: float
llist1: List[str] = field(default_factory=list)
修改成
@dataclass
class Fieldset:
label: str
fields: List[Field] = []
__annotations__ = {
'label': str,
'fields': List[Field],
}
或者
@dataclass
class Fieldset:
label: str
fields: List[Field] = []
def __init__(self, label, fields):
self.label = label
self.fields = fields
参考:
Classes lack __annotations__ (PEP-526) · Issue #2552 · cython/cython · GitHub
Type annotation required? · Issue #2 · ericvsmith/dataclasses · GitHub
Python 3.7 dataclasses -- 数据类 之 dataclass_a_blooming_tree的博客-CSDN博客