Steven D'Aprano wrote:
I have a series of subclasses that inherit methods from a base class, but I'd like them to have their own individual docstrings. The obvious solution (other than copy-and-paste) is this:


class Base(object):
    colour = "Blue"
    def parrot(self):
        """docstring for Base"""
        return "Norwegian %s" % self.colour


class SubClass(Base):
    colour = "Red"
    def parrot(self):
        """docstring for Subclass"""
        return super(Subclass, self).parrot()


but that adds an awful lot of boilerplate to my subclasses. Are there any other good solutions to this problem?




If I've understood, one idea is:

------------------------------
def type_factory(colour):

    class Base(object):

        def parrot(self):
            """Norwegian %s"""
            return 1
        parrot.__doc__ %= colour

    return Base

class Base(object):

    def __new__(cls, *args, **kw):
        return type_factory(cls.colour)(*args, **kw)


class A(Base):
    colour = "Blue"

class B(Base):
    colour = "Red"

a = A()
b = B()

print inspect.getdoc(a.parrot)
Norwegian Blue
print inspect.getdoc(b.parrot)
Norwegian Red
----------------------------------------------

In the more general case, (ie. where you don't know that there is a method called parrot and an attribute called colour), I imagine you could do the same thing but at the metaclass level.

HTH

G.F.

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to