[Python-Dev] Breaking calls to object.__init__/__new__

Terry Reedy tjreedy at udel.edu
Thu Mar 22 05:19:12 CET 2007


"Guido van Rossum" <guido at python.org> wrote in message 
news:ca471dc20703212037g3e03df1fq433a988257d10112 at mail.gmail.com...
| There are different philosophies about the correct style for
| cooperative super calls.
|
| The submitter of the bug report likes to remove "consumed" arguments
| and pass the others on, having something at the root that complains
| about any unused arguments. It has the problem that you mention: if
| multiple classes might be interested in the *same* argument they won't
| see it. The other style is to pass *all* arguments down, and let
| everyone cherry-pick them. The last call then just throws them away.
| This has the problem that misspelled arguments are silently ignored
| rather than being diagnosed at the point where you can do something
| about it.
|
| I don't know what the "best practice" is (like Greg Ewing, I don't use
| either style myself) but I've got a feeling that it must be easier to
| solve the former problem than the latter (also I don't know that the
| former actually occurs in practice). When using more traditional
| styles, or single inheritance, it certainly makes more sense to reject
| excess arguments than to ignore them; the original code was clearly
| intending to do this, but due to the minimalist coding, it didn't
| catch enough.

It seems to me that to get the exact behavior one wants at the apex of a 
diamond structure, one should subclass object and override .__init__  with 
a function that does not call object.__init__  and use that subclass as the 
apex instead of object itself.  Wouldn't this mask the behavior of 
object.__init__ and whatever changes decided on?

(But having said that, I have no opiniou on what the default should be for 
those who don't do this.)

Terry Jan Reedy





More information about the Python-Dev mailing list