[IronPython] new.classobj() fails with "TypeError: __bases__ items must be classes (got type)"
Dino Viehland
dinov at exchange.microsoft.com
Thu Nov 8 00:16:18 CET 2007
This is definitely a bug in IronPython and it seems to be present in one way or another for all versions. Thanks for the bug report.
The actual issue can be summarized as:
class foo(object): pass
class bar: pass
i = type(bar)('abc', (foo, ), {})
i()
or an alternate way of expressing it:
class foo(object): pass
class bar: pass
type(bar).__new__(type(bar), 'abc', (foo, ), {})
Both of these should apparently be the same as type('abc', (foo, ), {}). In other words classobj.__new__ should do the whole normal type creation thing rather than just create classobj's.
I've opened a bug to track the issue on CodePlex: http://www.codeplex.com/IronPython/WorkItem/View.aspx?WorkItemId=13740 If this is a particularly blocking issue then I'd suggest voting on the bug. Otherwise the simple workaround is to call type() instead of new.classobj()
-----Original Message-----
From: users-bounces at lists.ironpython.com [mailto:users-bounces at lists.ironpython.com] On Behalf Of abs
Sent: Wednesday, November 07, 2007 1:33 PM
To: users at lists.ironpython.com
Subject: [IronPython] new.classobj() fails with "TypeError: __bases__ items must be classes (got type)"
Hello,
Here are two files, A.py and B.py:
(Execution details follow)
--- file A.py ---
1
2 import sys
3 import new
4 import imp
5
6 def main():
7 moduleInfo = imp.find_module('B')
8 module = imp.load_module('B', moduleInfo[0], moduleInfo[1],
moduleInfo[2])
9
10 t = new.classobj('Test1', (getattr(module, 'Test'),), {})
11 i = t()
12 i.Execute()
13
14 if __name__ == '__main__':
15 sys.exit(main())
16
--- /file A.py ---
--- file B.py ---
1
2 class Test(object):
3 def __init__(self):
4 print 'hello'
5
6 def Execute(self):
7 print 'hello'
8
--- /file B.py ---
$ c:\Python25\python.exe A.py
hello
hello
$ "c:\Program Files\IronPython-1.1\ipy.exe" A.py
Traceback (most recent call last):
File C:\A.py, line 23, in Initialize
File C:\A.py, line 18, in main
TypeError: Unable to cast object of type
'IronPython.Runtime.Types.UserType' to type
'IronPython.Runtime.Types.OldClass'.
$ "c:\Program Files\IronPython-2.0A5\ipy.exe" A.py
Traceback (most recent call last):
File A.py, line 23, in Initialize
File , line 0, in _stub_##19
File A.py, line 16, in main
File , line 0, in _stub_##51
TypeError: __bases__ items must be classes (got type)
Am I doing something wrong, or is this a bug?
Thanks!
_______________________________________________
Users mailing list
Users at lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
More information about the Ironpython-users
mailing list