Cython: Как я могу создать файл .pxd для кода, включая Enum?

Я пытаюсь «китонизировать» следующий пример кода, который включает экземпляр класса Enum:

from enum import Enum
class AnimalType(Enum):
    Shark = 0
    Fish = 1

class Animal:
    def __init__(self, animal_type: AnimalType, weight: float):
        self.animal_type = animal_type
        self.weight = weight

Создать .pyx-файл с объявлениями типов очень просто:

cpdef enum AnimalType:
    Shark = 0
    Fish = 1

cdef class Animal:
    cdef double weight
    cdef AnimalType animal_type

    def __init__(self, animal_type: AnimalType, weight: float):
        self.animal_type = animal_type
        self.weight = weight

Однако я не могу разделить файл .pyx на файлы .pyx и .pxd (заголовок). Не могли бы вы помочь мне определить файл .pxd для моего примера?

Редактировать: я прочитал https://groups.google.com/g/cython-users/c/ZoLsLHwnUY4. Может и не получится....

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
906
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это работает для меня, не делая ничего особенного:

testenum.pxd:

cpdef enum AnimalType:
    Shark = 0
    Fish = 1

(Вы также можете поместить cdef части Animal туда, если хотите поделиться определением Cython).

testenum.pyx:

# no need to cimport testenum - this happens implicitly

cdef class Animal:
    cdef double weight   # omit this if you put it in the pxd file
    cdef AnimalType animal_type   # omit this if you put it in the pxd file

    def __init__(self, animal_type: AnimalType, weight: float):
        self.animal_type = animal_type
        self.weight = weight

какой-то другой файл.pyx:

from testenum cimport AnimalType

cdef class C:
    cdef AnimalType at

from testenum import AnimalType тоже работает.

Felix Hohnstein 20.12.2020 15:19

Я думал, что вы можете определять типы и объявления типов только в pxd-файле. Не ожидал, что смогу настроить перечисление, а затем импортировать/импортировать куда угодно. Но работает так...

Felix Hohnstein 20.12.2020 15:20

Разница между import и cimport в том, что с cimport Cython знает о типе во время компиляции. Что иногда полезно

DavidW 20.12.2020 15:40

Другие вопросы по теме