Stuck with metaclass

Fernando Rodriguez frr at
Sat Nov 22 18:50:24 CET 2003


I have a class Preconditions that has a metaclass (MetaChecker), but I guess I
somehow screwed things up with the metaclass definition...  

When I create an instance of Preconditions, I get the doc string instead! =:-O
If I remove the metaclass statemente, everythign works fine.

Any help would be greatly appreciated. O:-)

here's my code:

import inspect

def _isNary(fn,n):
    Determines a function has the right 'arity'
    args = inspect.getargspec(fn)[0]
    if len(args) == n:
        return 1
        return None

class MetaChecker(type):
    Metaclas that checks if all 'public' methods' (those that
    don't start with _ are unary functions
    def __new__(cls, clsname, bases, attribs):
        for name, value in attribs.iteritems():
            if name[0:1] != "_" and inspect.isfunction(value):
                if not _isNary(value, 1):
                        src = inspect.getsource(value)
                        src = None

                    msg = "%s.%s is not a thunk method!"%(clsname,name)
                    if src:
                        msg += "\nOffending source:\n\n%s"%src
                    raise msg
        return type.__new__(cls, name, bases, attribs)

class Preconditions (object):
    Can only have thunks.
    __metaclass__ = MetaChecker

p = Preconditions()
print p

The result is:
<__main__.__doc__ object at 0x0093E970>

What the heck????????

More information about the Python-list mailing list