Class Variable Access and Assignment
Paul Rubin
http
Sat Nov 5 21:14:03 EST 2005
Steven D'Aprano <steve at REMOVETHIScyber.com.au> writes:
> > It never occurred to me that immutable objects could implement __iadd__.
> > If they can, I'm puzzled as to why.
> I'm surprised that it never occurred to you that people might
> want to do something like x = 1; x += 1 in Python,
But I wouldn't expect that to mean that ints implement __iadd__. I'd expect
the x+=1 to just use __add__. I haven't checked the spec though.
> I can respect the position of somebody who says that only methods
> should be inherited -- somebody, I think it was you, suggested that there
> is at least one existing OO language that doesn't allow inheritance for
> attributes, but never responded to my asking what language it was.
I was thinking of Flavors. You use a special function (send) to do method
calls. But people generally felt that was kludgy and CLOS eliminated it.
I'm not sure what happens in Smalltalk.
> instance.attribute sometimes reading from the class attribute is a feature
> of inheritance; instance.attribute always writing to the instance is a
> feature of OOP; instance.attribute sometimes writing to the instance and
> sometimes writing to the class would be, in my opinion, not just a wart
> but a full-blown misfeature.
But that is what you're advocating: x.y+=1 writes to the instance or
the class depending on whether x.y is mutable or not. Say you have an
immutable class with a mutable subclass or vice versa. You'd like to
be able to replace a class instance with a subclass instance and not
have the behavior change (Liskov substitution principle), etc.
More information about the Python-list
mailing list