Using isinstance should be the right way to check if an object is an interface. However, this does not currently work. http://www.codeplex.com/WorkItem/View.aspx?ProjectName=IronPython&WorkItemId=8121 tracks this issue. The (admittedly ugly) workaround that is also mentioned in the bug is:
>>> import clr >>> import System >>> isinstance(1, System.IFormattable) # Should return True False >>> clr.GetClrType(System.IFormattable).IsAssignableFrom(clr.GetClrType(type(1))) >>> # Workaround True For your second question, the answer depends on the actual type (not the statically declared C# type) of "geometryDef". If it implements IGeometryDefEdit explicitly, you do need to use "IGeometryDefEdit.MethodName(geometryDef, args)". Else, you can just use "geometryDef. MethodName(args)". The following bugs are related. http://www.codeplex.com/IronPython/WorkItem/View.aspx?WorkItemId=4538 http://www.codeplex.com/IronPython/WorkItem/View.aspx?WorkItemId=1506 -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Alex Willmer Sent: Sunday, February 25, 2007 5:36 PM To: users@lists.ironpython.com Subject: [IronPython] Using CLR bound COM interfaces Hello, I've been attempting with IronPython, to access the CLR binding to ArcObjects[1], a COM based Geographic Information System (GIS) library. I come at this from a CPython background, so my knowledge of COM & .NET are lacking. I'm trying to understand how interfaces (IFoobar) are dealt with in IronPython. A C# example I'm attempting to transcribe contains the following lines: if (!((objectWorkspace is IWorkspace) || (objectWorkspace is IFeatureDataset))) { throw(new Exception(....)); } My assumption was that isinstance() would replace 'is', but the following would indicate otherwise. From the .NET 2.0 docs[2] the System.Uri class inherits from ISerializable >>> import System >>> import System.Runtime.Serialization >>> x = System.Uri('http://example.net') >>> isinstance(x, System.Uri) True >>> isinstance(x, System.Runtime.Serialization.ISerializable) False How should I test a particular object implements an interface? My second query is based on the following C#: IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit) geometryDef; // Assign Geometry Definition geometryDefEdit.GeometryType_2 = geometryType; geometryDefEdit.GridCount_2 = 1; geometryDefEdit.set_GridSize(0, 0.5); geometryDefEdit.AvgNumPoints_2 = 2; geometryDefEdit.HasM_2 = false; geometryDefEdit.HasZ_2 = true; I understand that to transcribe this is I should forget the assignment/cast and replace geometryDefEdit.Method(args) with IGeometryDefEdit.MethodName(geometryDef, args). Is this correct? Many thanks. Alex Willmer [1] http://edndoc.esri.com/arcobjects/9.1/ [2] http://msdn2.microsoft.com/en-us/library/system.uri.aspx _______________________________________________ users mailing list users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com _______________________________________________ users mailing list users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com