Tabla de Contenidos

IronPython

IronPython es un interprete de Python para el CLR (Common Language Runtime) de .NET, está creado en C# y permite que cualquier programa en Python pueda ser interpretado con este además de poder acceder a las bibliotecas .NET.

Básico

Como en Python...

def add(a, b):
    "add(a, b) -> returns a + b"
    return a + b
from System.Math import *
import sys
sys.path.append(r"c:\python26\lib")

.NET

Namespaces

Para acceder a un namespace de .NET haremos un import de este, por ejemplo:

import System
dir (System.Environment)
System.Console.WriteLine("hola mundo!")

Clases

Para utilizar las clases de .NET primero tendríamos que importarlas y luego, con sintaxis Python, utilizarlas.
En el siguiente ejemplo se recogen las clases de System.Collections y luego se crea un objeto Hashtable, se introducen sus datos y luego se muestran estos:

from System.Collections import *
h = Hashtable()
h["a"] = "IronPython"
h["b"] = "Tutorial"
print h["a"]
for e in h: 
  print e.Key, ":", e.Value

Podemos declarar las listas a partir de arrays python:

l = ArrayList([1,2,3])
s = Stack((1,2,3))

Genericos

Para declarar una clase genérica en IronPython utilizaremos la declaración como en Python pero antes de los parentesis pondremos entre corchetes el tipo:

from System import *
from System.Collections.Generic import *
l = List[String]()
l.Add("hola")
l.Add("adios")
for e in l:
	print e

Acceso a librerías

IronPython puede importar algunas librerías de .NET (las más usadas), pero para agregar otras estas deben ser referenciadas mediante el módulo clr en el cual podemos encontrar:

Luego deberemos importar el namespace.

import clr
clr.AddReference("System.Xml")
import System.Xml
d = System.Xml.XmlDocument()
d.Load("file.xml")

O con una librería creada por nosotros:

import clr
clr.AddReferenceToFile("ClassLibrary1.dll")
from ClassLibrary1 import *
c = Class1()
c.Suma(3,5)

Eventos y delegados

Se agregan como en C#, pero en vez de ser métodos de clases son funciones en Python:

from System.IO import *
w = FileSystemWatcher()
w.Path = "."
def handle (*args):print args
w.Created += handle
w.Changed += handle
w.EnableRaisingEvents = True

Podemos indicar los parámetros:

def handle (w, a):print a.ChangeType, a.FullPath

Y para elminarlos:

w.Changed -= handle

Windows Forms

Debido a la necesidad de un objeto aplicación y tal durante la ejecución de un programa con GUI en .NET la cosa se complica con IronPython, pero podemos hacerlo más fácil importando el archivo winforms.py que está en la carpeta del tutorial, de esa forma los imports y tal ya los hace este:

import winforms
from System.Windows.Forms import *
 
def prueba (*args):
	MessageBox.Show("hola caracola")
 
form1 = Form()
b = Button()
b.Text = "hola"
b.Click += prueba
form1.Controls.Add(b)
form1.Text = "prueba"
form1.Show()

Como...

Crear un array

import System
System.Array[int]((1,2,3))

O…

Array[Array[int]]( ( (1,2), (2,3) ) )

Escoger entre métodos sobreescritos

from System import Console
Console.WriteLine.Overloads[object](None)

Notas

Archivos