L'instanciation d'une classe python en C#
J'ai écrit une classe en python que je veux enrouler dans une .net de l'assemblée via IronPython et de l'instancier dans une application C#. J'ai migré de la classe à IronPython, créé une bibliothèque de l'assemblée et de le référencer. Maintenant, comment dois-je réellement obtenir une instance de cette classe?
La classe ressemble (partiellement) comme ceci:
class PokerCard:
"A card for playing poker, immutable and unique."
def __init__(self, cardName):
Le test de stub j'ai écrit en C# est:
using System;
namespace pokerapp
{
class Program
{
static void Main(string[] args)
{
var card = new PokerCard(); //I also tried new PokerCard("Ah")
Console.WriteLine(card.ToString());
Console.ReadLine();
}
}
}
Que dois-je faire pour instancier cette classe en C#?
Vous devez vous connecter pour publier un commentaire.
IronPython classes sont pas .NET classes. Elles sont des instances de IronPython.Moment de l'exécution.Les Types.PythonType qui est le Python métaclasse. C'est parce que les classes Python sont dynamiques et soutenir l'ajout et la suppression de méthodes au moment de l'exécution, des choses que vous ne peut pas faire avec .NET classes.
À utiliser les classes Python en C#, vous devrez utiliser le ObjectOperations classe. Cette classe permet d'opérer sur python les types et les instances de la sémantique de la langue elle-même. par exemple, il utilise la magie des méthodes appropriées, auto-promeut des entiers longs etc. Vous pouvez en savoir plus sur ObjectOperations en regardant le source ou à l'aide de réflecteur.
Ici est un exemple. Calculator.py contient une classe simple:
Vous pouvez utiliser à partir de votre pré .NET 4.0, C# code comme ceci:
Vous aurez besoin de faire référence à des assemblées IronPython.dll Microsoft.De script et de Microsoft.L'écriture de scripts.De base.
C# 4 fait ce beaucoup plus facile avec le nouveau de type dynamique.
Si vous utilisez Visual Studio 2010 ou plus tard avec NuGet soutien tout simplement l'exécuter pour télécharger et de référence des bibliothèques appropriées.
ObjectOperations
op
ne semble pas avoir un.call
méthode .net 4.5Maintenant que .Net 4.0 est sorti et a le type dynamique, cet exemple devrait être mis à jour. En utilisant le même fichier python comme dans m-forte originale de réponse:
Voici comment vous pourriez l'appeler à l'aide .Net 4.0:
Encore une fois, vous avez besoin d'ajouter des références à IronPython.dll et Microsoft.De script.
Comme vous pouvez le voir, le réglage initial et la création du fichier source est la même.
Mais une fois que la source est correctement exécuté, en travaillant avec les fonctions python est beaucoup plus facile grâce à la nouvelle "dynamique" mot-clé.
Je suis la mise à jour de l'exemple ci-dessus fournis par des Intelligent de l'Homme pour compilé IronPython classes (dll) au lieu de IronPython code source dans un .py fichier.
C# 4.0 code avec le nouveau type dynamique est comme suit:
Références:
J'ai cherché haut et bas et j'ai peur qu'il ne semble pas être beaucoup d'informations relatives à cette. Je suis à peu près certain que personne n'a mis au point un moyen de le faire dans la manière propre que vous le souhaitez.
La raison principale, je pense que c'est un problème, c'est que pour voir la
PokerCard
type dans votre application en C# vous devez compiler votre code Python à l'IL. Je ne crois pas qu'il y a tout de Python->
IL compilateurs là.