On Mon, 9 Feb 2009 17:34:05 -0800, Daniel Fetchinson
<fetchin...@googlemail.com> wrote:
Hello. I've been scouring the web looking for something to clear up a
little confusion about the use of "super()" but haven't found anything
that really helps. Here's my simple example:
[snip]
"super(Child,self).__init__(filePath)
TypeError: super() argument 1 must be type, not classobj"
What have I done wrong? Thanks in advance for any help.
Consider whether you really need to use super().
http://fuhm.net/super-harmful/
Did you actually read that article, understood it, went through the
tons of responses from python-dev team members, including Guido
Yes. Why the knee-jerk reaction?
Because throwing around that link carries about the same amount of
information as "perl is better than python", "my IDE is better than
yours", "vim rulez!", "emacs is cooler than vim", etc, etc.
That's not true. The page contains lots of information.
I simply pointed out a resource which
might be helpful to someone trying to learn to use super.
It will certainly not be helpful to anyone trying to learn the usage
of super. The person who wrote that essay is simply misunderstanding
the concept, as has been explained countless times by the python dev
team. Hence, it only increases confusion, adds to the noise and
spreads false alarm.
Quoting Guido, in whom you seem to place a lot of faith:
Super is intended for use that are designed with method cooperation in
mind, so I agree with the best practices in James's Conclusion:
"""
* Use it consistently, and document that you use it,
as it is part of the external interface for your class, like it or not.
* Never call super with anything but the exact arguments you received,
unless you really know what you're doing.
* When you use it on methods whose acceptable arguments can be
altered on a subclass via addition of more optional arguments,
always accept *args, **kw, and call super like
"super(MyClass, self).currentmethod(alltheargsideclared, *args,
**kwargs)".
If you don't do this, forbid addition of optional arguments in subclasses.
* Never use positional arguments in __init__ or __new__.
Always use keyword args, and always call them as keywords,
and always pass all keywords on to super.
"""
The original poster's code did not use it consistently, did not document its
use, and used positional arguments in __init__. So according to Guido, the
OP was misusing super. Why are you complaining that I pointed this out?
Honestly, I don't understand how this thing got so much out of
control. If anyone starts an intelligent question or remark about
super, this essay is thrown in no matter what. Anyone can explain why?
You're seriously overreacting.
Jean-Paul
--
http://mail.python.org/mailman/listinfo/python-list