Sion Arrowsmith wrote: > Russell Warren <[EMAIL PROTECTED]> wrote: (snip) > At first I thought self.__dict__ would do it, but callable methods >>seem to be excluded so I had to resort to dir, and deal with the >>strings it gives me. > > This last sentence suggests to me something like: > > attrs = set(s for s in dir(self) if not s.startswith('_')) > myCallables = attrs.difference(a.__dict__) err... s/a.__dict__/self.__dict__/
> return list(myCallables) Won't work as expected: >>> class Tricky(object): ... class_attrib = 42 ... def __init__(self, attr): ... self.attr = attr ... def doit(self): ... if callable(self.attr): ... return self.attr(self) ... >>> t = Tricky(lambda obj: obj.__class__.__name__) >>> t <__main__.Tricky object at 0x2aaaaab28ed0> >>> def getcallables(obj): ... attrs = set(s for s in dir(obj) if not s.startswith('_')) ... callables = attrs.difference(obj.__dict__) ... return list(callables) ... >>> getcallables(t) ['doit', 'class_attrib'] >>> t.attr(t) 'Tricky' >>> t.class_attrib() Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: 'int' object is not callable There are 2 reliable ways to know if an object is callable: - using callable() - trying to call it -- bruno desthuilliers python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for p in '[EMAIL PROTECTED]'.split('@')])" -- http://mail.python.org/mailman/listinfo/python-list