On Sun, Feb 22, 2009 at 3:31 AM, Barak, Ron <ron.ba...@lsi.com> wrote: <snip> >> > Applying your suggestion: >> > >> > class ListControlMeta(type(wx.Frame), type(CopyAndPaste)): >> > pass >> > >> > class ListControl(wx.Frame, CopyAndPaste): >> > def __init__(self, parent, id, title, list, max_list_width, >> > log_stream, >> > style=wx.DEFAULT_FRAME_STYLE): >> > >> > __metaclass__= ListControlMeta >> > >> > >> > wx.Frame.__init__(self,parent,id,title,size=(max_list_width,-1), >> > style=style) >> > self.list = list >> > self.log_stream = log_stream >> > self.list_ctrl = wx.ListCtrl(self, -1, style=wx.LC_REPORT | >> > wx.LC_NO_HEADER) >> > self.list_ctrl.InsertColumn(0, title) >> > for i,line_ in enumerate(list): >> > self.list_ctrl.InsertStringItem(i, line_) >> > ... >> > >> > I get: >> > >> > $ python -u ./failover_pickle_demo09.py Traceback (most recent call >> > last): >> > File "./failover_pickle_demo09.py", line 319, in <module> >> > class ListControlMeta(type(wx.Frame), type(CopyAndPaste)): >> > TypeError: Error when calling the metaclass bases >> > multiple bases have instance lay-out conflict >> >> >From what I recall, that basically means that type(wx.Frame) and >> type(CopyAndPaste) are both C classes that are are mutually >> incompatible. It's basically the same reason you can't >> subclass from both `list` and `dict` or two other built-in >> types (you get the exact same error). >> >> Sounds like the only way to workaround this would be to do >> some coding in C or to use composition rather than >> inheritance for one of ListControl's superclasses. > > The wx.Frame may be coded in C, but the CopyAndPaste class, which I wrote, is > not (see it's listing below). > Could you have a look at the CopyAndPaste class, and see if something in its > construction strikes you as susspicious ? > > Thanks, > Ron. > > $ cat ./CopyAndPaste.py > #!/usr/bin/env python > > import wx > > class CopyAndPaste():
You need to subclass 'object' so as to make CopyAndPaste a new-style class. This may or may not resolve the error, but you should be doing it either way. class CopyAndPaste(object): Cheers, Chris -- Follow the path of the Iguana... http://rebertia.com -- http://mail.python.org/mailman/listinfo/python-list