[EMAIL PROTECTED] wrote:
 [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

Reply via email to