[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 methodsthen
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 newobjThis 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
