help on autosuper
Michele Simionato
mis6 at pitt.edu
Sun Jan 26 13:33:44 EST 2003
More information about the Python-list mailing list
Sun Jan 26 13:33:44 EST 2003
- Previous message (by thread): help on autosuper
- Next message (by thread): (test?return_true:return_false)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Michele Simionato <mis6+ at pitt.edu> wrote in message news:<mailman.1043499885.7817.python-list at python.org>... > In his essay on type/class unification, Guido defines the following > > autosuper metaclass: > > --- begin autosup.py --- > > class autosuper(type): #Guido's metaclass > > def init (cls, name, bases, dic): > > super(autosuper, cls). init (name, bases, dic) > > setattr(cls," %s super" % name, super(cls)) > > class C(object): #a simple class > > metaclass =autosuper > > --- end autosup.py --- > > Notice that I have put the metaclass in a module called autosup. > > Everything works as expected; however, there is some incompatibility > > with pydoc: > > >>> import autosup > > >>> help(autosup) > > Traceback (most recent call last): > > File "<pyshell#1>", line 1, in ? > > help(autosup) > > File "C:\PYTHON22\lib\site.py", line 279, in call > > return pydoc.help(*args, **kwds) > > File "C:\PYTHON22\lib\pydoc.py", line 1510, in call > > self.help(request) > > File "C:\PYTHON22\lib\pydoc.py", line 1546, in help > > else: doc(request, 'Help on %s:') > > File "C:\PYTHON22\lib\pydoc.py", line 1341, in doc > > pager(title % (desc + suffix) + '\n\n' + text.document(thing, name)) > > File "C:\PYTHON22\lib\pydoc.py", line 267, in document > > if inspect.ismodule(object): return apply(self.docmodule, args) > > File "C:\PYTHON22\lib\pydoc.py", line 961, in docmodule > > contents.append(self.document(value, key, name)) > > File "C:\PYTHON22\lib\pydoc.py", line 268, in document > > if inspect.isclass(object): return apply(self.docclass, args) > > File "C:\PYTHON22\lib\pydoc.py", line 1093, in docclass > > lambda t: t[1] == 'method') > > File "C:\PYTHON22\lib\pydoc.py", line 1035, in spill > > name, mod, object)) > > File "C:\PYTHON22\lib\pydoc.py", line 269, in document > > if inspect.isroutine(object): return apply(self.docroutine, args) > > File "C:\PYTHON22\lib\pydoc.py", line 1116, in docroutine > > realname = object. name > > AttributeError: 'super' object has no attribute ' name ' > > Somebody can tell me what's happening, please ? > > TIA, > > Michele > > > -- It seems that the problem is related to the use of super. I don't know what pydoc is doing in the example before, but one can reproduce the same error message in a much simpler situation: class C(object): "C docstring" attr="C.attr" meth=lambda self:'C.meth' class D(C): pass print super(D,D()).attr # C.attr print super(D,D()).meth() # C.meth print super(D,D()).__doc__ # C docstring print C.__name__ #okay print super(D,D()).__name__ #error! It seems "super" doesn't work the same for all special attributes: it works o.k. for "__doc__" but not for "__name__". Still I don't know why, i.e. if this is the desired effect or not. Cheers, Michele
- Previous message (by thread): help on autosuper
- Next message (by thread): (test?return_true:return_false)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list