Использование классов данных с Cython - PullRequest
2 голосов
/ 10 мая 2019

Я использую Cython для обфускации кода, поэтому производительность не является проблемой в данный момент.Проблема в использовании классов данных.

Нет ошибки во время компиляции, когда код Cythonize содержит определения классов данных.Но при выполнении кода я получаю TypeError: <field> 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)

Запуск кода без цитонизации работает нормально.Но после цитонизации я получаю следующее сообщение об ошибке:

 File "dataclass_.py", line 4, in init dataclass_
    @dataclass   File "/home/aryskin/miniconda3/envs/tf113_gpu_conda/lib/python3.7/dataclasses.py", line 991, in dataclass
    return wrap(_cls)   File "/home/aryskin/miniconda3/envs/tf113_gpu_conda/lib/python3.7/dataclasses.py", line 983, in wrap
    return _process_class(cls, init, repr, eq, order, unsafe_hash, frozen)   File "/home/aryskin/miniconda3/envs/tf113_gpu_conda/lib/python3.7/dataclasses.py", line 857, in _process_class
    raise TypeError(f'{name!r} is a field but has no type annotation') TypeError: 'llist1' is a field but has no type annotation

Есть ли способ избежать этой проблемы без или с минимальным переписыванием исходного кода?

...