Real Problems with Python
Michael Hudson
mwh21 at cam.ac.uk
Sun Feb 13 18:03:08 EST 2000
More information about the Python-list mailing list
Sun Feb 13 18:03:08 EST 2000
- Previous message (by thread): Real Problems with Python
- Next message (by thread): Real Problems with Python
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
neelk at brick.cswv.com (Neel Krishnaswami) writes: > > > 3. Multiple inheritance is unsound > > > > > > By 'unsound' I mean that a method call to a method inherited by a > > > subclass of two other classes can fail, even if that method call > > > would work on an instance of the base class. > > > > Unsure what this is about; am pretty sure nobody has complained about it > > before. Certainly "depth first, left to right" is an unprincipled approach, > > but in practice it's more than predictable enough to use. > > Here's some code: > > class Foo: > x = 99 > def frob(self): > print "%d bottles of beer" % self.x > > class Bar: > x = "bar" > def wibble(self): > print "Belly up to the " + self.x > > Note that all the operations on Foo and Bar work safely for direct > instances of Foo and Bar. But if you define a subclass like so: > > class Baz(Bar, Foo): > pass > > you can get type errors even though both of the superclasses have > type-safe operations: > > >>> q = Baz() > >>> q.frob() > Traceback (innermost last): > [...] > TypeError: illegal argument type for built-in operation > > This is only an annoyance in day-to-day work, but it becomes a big > problem if you are serious about building automatic code analysis > tools for Python (eg for CP4E). This is because the soundness theorems > needed to write things like soft typing tools no longer hold. :( How is this different from (excuse the dodgy syntax, I haven't done much Eiffel): class FOO feature x: INTEGER feature frob: STRING is do Result = interpolate("%d bottles of beer",x.to_string) end end class BAR feature x: STRING feature wibble: STRING is do Result = concatenate("Belly up to the ",x) end end class BAZ inherit FOO,BAR end ? I mean, that won't compile, presumably, but in the case of a code analysis tool there comes a point when it can just throw it's hands up in the air and say "you're not playing by the rules, I give up". Repeasted feature inheritance is not a solved problem in any language I'm aware of. And in this case, the code has a bug, so code analysis catching it is surely a good thing? not-at-understanding-yet-ly y'rs Michael
- Previous message (by thread): Real Problems with Python
- Next message (by thread): Real Problems with Python
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list