[trying to create a single Python class with the equivalent of the following overloaded constructors]
wxFoldWindowItem(wxWindow *wnd, int flags = wxFPB_ALIGN_WIDTH,
int ySpacing = wxFPB_DEFAULT_YSPACING,
int leftSpacing = wxFPB_DEFAULT_LEFTSPACING, int rightSpacing = wxFPB_DEFAULT_RIGHTSPACING)
or
wxFoldWindowItem(int y, const wxColour &lineColor = *wxBLACK, int ySpacing = wxFPB_DEFAULT_YSPACING,
int leftSpacing = wxFPB_DEFAULT_LEFTLINESPACING,
int rightSpacing = wxFPB_DEFAULT_RIGHTLINESPACING)
Several options in addition to the factory function that Kent has suggested (and I'll assume he'll follow up with clarification)
# Option 1: one abstract base class holding all/most of the methods, and two separate subclasses reflecting the two use-cases.
class _AbstractFoldWindowItem(object): def __init__(self, *args, **kw): raise NotImplemetedError
def ... all the shared methods
then
class FoldWindowItem(_AbstractFoldWindowItem): def __init__(self, wxWindow, flags = wxFPB_ALIGN_WIDTH, ySpacing = wxFPB_DEFAULT_YSPACING, leftSpacing = wxFPB_DEFAULT_LEFTSPACING, rightSpacing = wxFPB_DEFAULT_RIGHTSPACING):
class FoldSeparator(_AbstractFoldWindowItem): def __init__(self, y, lineColor = wx.BLACK, ySpacing = wx.FPB_DEFAULT_YSPACING, leftSpacing = wx.FPB_DEFAULT_LEFTLINESPACING, rightSpacing = wx.FPB_DEFAULT_RIGHTLINESPACING):
# Option 2: One class, two constructors:
class FoldWindowItem():
def __init__(self, wxWindow, flags = wxFPB_ALIGN_WIDTH, ySpacing = wxFPB_DEFAULT_YSPACING, leftSpacing = wxFPB_DEFAULT_LEFTSPACING, rightSpacing = wxFPB_DEFAULT_RIGHTSPACING): """Initializes with wxWindow""" self._type = wx.Window
@classmethod def FromSeparator(cls, y, lineColor = wx.BLACK, ySpacing = wx.FPB_DEFAULT_YSPACING, leftSpacing = wx.FPB_DEFAULT_LEFTLINESPACING, rightSpacing = wx.FPB_DEFAULT_RIGHTLINESPACING): newobj = cls.__new__(y, lineColor = wx.BLACK, ySpacing = wx.FPB_DEFAULT_YSPACING, leftSpacing = wx.FPB_DEFAULT_LEFTLINESPACING, rightSpacing = wx.FPB_DEFAULT_RIGHTLINESPACING) newobj._type = wx.SEPARATOR # other initializatio return newobj
This requires the user code to call the class in two ways depending on how it is to be used:
i.e., myFoldWindowItem = FoldWindowItem(Window) or myFoldWindowItem = FoldWindowItem.FromSeparator(y)
# Option 3: inspect the arguments and provide the signature details in the docstring
class FoldWindowItem():
def __init__(self, obj, **kw): """Initialize with: wxWindow, flags = wxFPB_ALIGN_WIDTH, ySpacing = wxFPB_DEFAULT_YSPACING, leftSpacing = wxFPB_DEFAULT_LEFTSPACING, rightSpacing = wxFPB_DEFAULT_RIGHTSPACING)
or: y, lineColor = wx.BLACK, ySpacing = wx.FPB_DEFAULT_YSPACING, leftSpacing = wx.FPB_DEFAULT_LEFTLINESPACING, rightSpacing = wx.FPB_DEFAULT_RIGHTLINESPACING)"""
if isinstance(obj, wx.Window): # Do one thing elif isinstance(obj, wx.SEPARATOR): # Do the other
HTH
Michael
-- http://mail.python.org/mailman/listinfo/python-list