[Python-Dev] Python 2.2a* getattr suggestion and question
Gordon McMillan
gmcm@hypernet.com
Sun, 30 Sep 2001 09:08:58 -0400
Roman Suzi wrote:
> Well, now every attr access goes thru __getattr__-method,
> so this could cause situations which give not so clear
> diagnostics:
>
> -----------------------------------------------------------------
>
> Python 2.2a3 (#1, Sep 26 2001, 22:42:46)
> [GCC egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)] on linux2
> Type "help", "copyright", "credits" or "license" for more
> information. HELP loaded. Readline loaded. History loaded. >>>
> class A: ... def aa(self): ... print self ... >>> class B(A):
> ... def __getattr__(self, x): ... print "getattr:", x ...
> >>> b = B() >>> b.aa getattr: __repr__ Traceback (most recent
> call last):
> File "<stdin>", line 1, in ?
> TypeError: object is not callable: None
> -----------------------------------------------------------------
Hmm. If that last line you typed into the interp was, in fact,
"b.aa()", then there's nothing new here. The "print" asked for
__repr__ and got None. You'll get something very similar in
any version of Python.
If you really typed "b.aa", then something's really strange,
because you didn't ask to call anything, yet B's __getattr__
was asked for "__repr__", not "aa". Since I doubt Guido has
adopted VB's call-with-no-args-doesn't-need-parens, I bet you
misquoted your session.
- Gordon