2016-11-14 1 views
2

Comment créer un type en utilisant l'API C Python qui hérite de plusieurs autres types?Héritage multiple dans l'API C Python

La documentation Python inclut un exemple de type qui hérite d'un autre type, mais il n'y a pas d'exemple ou de mention d'héritage multiple que j'ai pu trouver.

+0

Veuillez inclure des liens vers la documentation et ajouter des fragments pertinents à votre question. – Leon

Répondre

0

L'API C ne prend pas en charge l'héritage multiple. Vous devez appeler vous-même PyType_Type, en simulant une instruction Python standard class. Ceci est documenté dans la section API C sur specifying a base type for an extension type:

PyTypeObject * PyTypeObject.tp_base

Un pointeur facultatif se rapportant à un type de base dont les propriétés de type sont héritées. À ce niveau, seul l'héritage est pris en charge; l'héritage multiple requiert dynamiquement la création d'un objet type en appelant le métatype.

Ce champ est hérité par les sous-types (évidemment), mais il est par défaut à &PyBaseObject_Type (qui pour les programmeurs Python est connu comme le type object).

+0

Si je fais cela, je peux toujours définir 'tp_methods' pour pointer vers des implémentations C, non? – tbodt

+0

@tbodt: Non. Vous n'avez pratiquement rien de la puissance de l'API C. Vous pourriez aussi bien écrire la classe en Python et avoir les méthodes déléguées aux fonctions C dans leurs implémentations: 'def some_method (self): return some_c_function (self)'. – user2357112

+0

Y at-il un moyen de le faire sans aucun code Python? – tbodt