.
Je suis en train actuellement d'optimiser mon programme Python et ai commencé avec Cython afin de réduire la fonction d'appel en tête et peut-être plus tard inclure optimisés bibliothèques C fonctions Alors
je suis tombé sur le premier problème: p >
J'utilise la composition dans mon code pour créer une plus grande classe. Jusqu'à présent, j'ai obtenu une de mes classes Python converties en Cython (qui était assez difficile). Voici le code: p>
membraneClass.pyx:18:6: 'bendingForcesClass' is not a type identifier building 'membraneClass' extension
3 Réponses :
Ce ne sont probablement pas la source de l'erreur, mais simplement pour affiner le problème, vous pouvez essayer de changer ce qui suit:
Pourrait-il être que vous utilisez et aussi le nom de l'objet membre ici: p> aussi, Feuilles de frappe code> comme nom de la variable ici: p>
BendingforcesClass code> est le nom du module ainsi que la classe. Enfin, que diriez-vous de faire un
CTTYPEDF CODE> à partir de la classe
BendingforcesClass Code>? P> P>
En raison de la modification de la question initiale à utiliser Pep8, cette réponse est légèrement en dehors de la synchronisation; Désolé pour ça.
Disclaimer: em> Cette question est très ancienne et je ne suis pas sûr que la solution actuelle fonctionnerait pour le code CYTHON 2011. afin de cimport une classe d'extension (classe CDEF) d'un autre fichier que vous avez besoin de fournir un .pxd fichier (également appelé définitions Fichier) déclarant toutes les classes, attributs et méthodes C. Voir Partage de types d'extension dans la documentation Pour référence. P> Pour votre exemple, vous auriez besoin d'un fichier
BendingforcesClass .pxd strong>
p> Toutes les importations, les variables et les attributs qui sont désormais déclarés dans le fichier
Bendingforcesclass .pyx strong>
P> BendsforcesClass.pxd code>, qui déclare la classe que vous souhaitez partager, ainsi que tous les variables de niveau de module, Typedfs , etc .: p>
.pxd code> peuvent (et devez être) supprimé du
.PYX code> fichier: p>
import numpy as np
cdef class bendingForcesClass(object):
def __init__(self, dtype_t bendingRigidity, np.ndarray[dtype_t, ndim=2] waveNumbersNorm):
self.bendingRigidity = bendingRigidity
self.matrixPrefactor = -self.bendingRigidity * waveNumbersNorm ** 2
cpdef np.ndarray calculate(self, np.ndarray membraneHeight):
cdef np.ndarray bendingForces
bendingForces = self.matrixPrefactor * membraneHeight
return bendingForces
Vous devez utiliser une déclaration ".pxd" et CIMPORT. (Essentiellement, CIMPORT arrive au moment de la compilation, tandis que l'importation se produit au moment de l'exécution, de sorte que Cyron ne puisse utiliser quoi que ce soit important).
créer "utils.pxd": p> blockQuote>
xxx pré> "utils.pyx" se lit maintenant p> blockQuote>
xxx pré> toutes les déclarations qui ont été dans le fichier pyx entrent dans le fichier .pxd. P>
Puis dans myModule.pyx p> blockQuote>
xxx pré> // réponse prolongée d'ici: Cython: Utilisation de la classe importée dans une déclaration de type P > p>
J'aimerais voir quel est le problème, alors gardez-nous posté si quelque chose fonctionne!
Je me rends compte que c'est une vieille question, mais j'ai un problème très similaire en ce moment. Avez-vous déjà compris cela?
Non. Malheureusement, je n'ai jamais résolu ce problème, car à un moment donné, cette partie du code est devenue sans importance pour mon projet. Quoi qu'il en soit, je vous souhaite bonne chance, et si vous le comprenez, postez-le ici et je serais heureux de l'accepter comme une réponse correcte.
Après beaucoup de recherche, j'ai trouvé cette réponse parfaite: Stackoverflow.com/Questtions/33616927/...