"""Something just to look at via pydoc."""



import types



class A_classic:

    "A classic class."

    def A_method(self):

        "Method defined in A."

    def AB_method(self):

        "Method defined in A and B."

    def AC_method(self):

        "Method defined in A and C."

    def AD_method(self):

        "Method defined in A and D."

    def ABC_method(self):

        "Method defined in A, B and C."

    def ABD_method(self):

        "Method defined in A, B and D."

    def ACD_method(self):

        "Method defined in A, C and D."

    def ABCD_method(self):

        "Method defined in A, B, C and D."





class B_classic(A_classic):

    "A classic class, derived from A_classic."

    def AB_method(self):

        "Method defined in A and B."

    def ABC_method(self):

        "Method defined in A, B and C."

    def ABD_method(self):

        "Method defined in A, B and D."

    def ABCD_method(self):

        "Method defined in A, B, C and D."

    def B_method(self):

        "Method defined in B."

    def BC_method(self):

        "Method defined in B and C."

    def BD_method(self):

        "Method defined in B and D."

    def BCD_method(self):

        "Method defined in B, C and D."



class C_classic(A_classic):

    "A classic class, derived from A_classic."

    def AC_method(self):

        "Method defined in A and C."

    def ABC_method(self):

        "Method defined in A, B and C."

    def ACD_method(self):

        "Method defined in A, C and D."

    def ABCD_method(self):

        "Method defined in A, B, C and D."

    def BC_method(self):

        "Method defined in B and C."

    def BCD_method(self):

        "Method defined in B, C and D."

    def C_method(self):

        "Method defined in C."

    def CD_method(self):

        "Method defined in C and D."



class D_classic(B_classic, C_classic):

    "A classic class, derived from B_classic and C_classic."

    def AD_method(self):

        "Method defined in A and D."

    def ABD_method(self):

        "Method defined in A, B and D."

    def ACD_method(self):

        "Method defined in A, C and D."

    def ABCD_method(self):

        "Method defined in A, B, C and D."

    def BD_method(self):

        "Method defined in B and D."

    def BCD_method(self):

        "Method defined in B, C and D."

    def CD_method(self):

        "Method defined in C and D."

    def D_method(self):

        "Method defined in D."





class A_new(object):

    "A new-style class."



    def A_method(self):

        "Method defined in A."

    def AB_method(self):

        "Method defined in A and B."

    def AC_method(self):

        "Method defined in A and C."

    def AD_method(self):

        "Method defined in A and D."

    def ABC_method(self):

        "Method defined in A, B and C."

    def ABD_method(self):

        "Method defined in A, B and D."

    def ACD_method(self):

        "Method defined in A, C and D."

    def ABCD_method(self):

        "Method defined in A, B, C and D."



    def A_classmethod(cls, x):

        "A class method defined in A."

    A_classmethod = classmethod(A_classmethod)



    def A_staticmethod():

        "A static method defined in A."

    A_staticmethod = staticmethod(A_staticmethod)



    def _getx(self):

        "A property getter function."

    def _setx(self, value):

        "A property setter function."

    def _delx(self):

        "A property deleter function."

    A_property = property(fdel=_delx, fget=_getx, fset=_setx,

                          doc="A sample property defined in A.")



    A_int_alias = int



class B_new(A_new):

    "A new-style class, derived from A_new."



    def AB_method(self):

        "Method defined in A and B."

    def ABC_method(self):

        "Method defined in A, B and C."

    def ABD_method(self):

        "Method defined in A, B and D."

    def ABCD_method(self):

        "Method defined in A, B, C and D."

    def B_method(self):

        "Method defined in B."

    def BC_method(self):

        "Method defined in B and C."

    def BD_method(self):

        "Method defined in B and D."

    def BCD_method(self):

        "Method defined in B, C and D."



class C_new(A_new):

    "A new-style class, derived from A_new."



    def AC_method(self):

        "Method defined in A and C."

    def ABC_method(self):

        "Method defined in A, B and C."

    def ACD_method(self):

        "Method defined in A, C and D."

    def ABCD_method(self):

        "Method defined in A, B, C and D."

    def BC_method(self):

        "Method defined in B and C."

    def BCD_method(self):

        "Method defined in B, C and D."

    def C_method(self):

        "Method defined in C."

    def CD_method(self):

        "Method defined in C and D."



class D_new(B_new, C_new):

    """A new-style class, derived from B_new and C_new.

    """



    def AD_method(self):

        "Method defined in A and D."

    def ABD_method(self):

        "Method defined in A, B and D."

    def ACD_method(self):

        "Method defined in A, C and D."

    def ABCD_method(self):

        "Method defined in A, B, C and D."

    def BD_method(self):

        "Method defined in B and D."

    def BCD_method(self):

        "Method defined in B, C and D."

    def CD_method(self):

        "Method defined in C and D."

    def D_method(self):

        "Method defined in D."



class FunkyProperties(object):

    """From SF bug 472347, by Roeland Rengelink.



    Property getters etc may not be vanilla functions or methods,

    and this used to make GUI pydoc blow up.

    """



    def __init__(self):

        self.desc = {'x':0}



    class get_desc:

        def __init__(self, attr):

            self.attr = attr

        def __call__(self, inst):

            print 'Get called', self, inst

            return inst.desc[self.attr]

    class set_desc:

        def __init__(self, attr):

            self.attr = attr

        def __call__(self, inst, val):

            print 'Set called', self, inst, val

            inst.desc[self.attr] = val

    class del_desc:

        def __init__(self, attr):

            self.attr = attr

        def __call__(self, inst):

            print 'Del called', self, inst

            del inst.desc[self.attr]



    x = property(get_desc('x'), set_desc('x'), del_desc('x'), 'prop x')





submodule = types.ModuleType(__name__ + '.submodule',

    """A submodule, which should appear in its parent's summary""")

