Mike Meyer <[EMAIL PROTECTED]> wrote: > "Giovanni Bajo" <[EMAIL PROTECTED]> writes: > > In short, you can't. I usually try harder to derive from tuple to > > achieve this (defining a few read-only properties to access item > > through attributes). Using __slots__ is then required to avoid > > people adding attributes to the instance. > > Note that this property of __slots__ is an implementation detail. > You can't rely on it working in the future.
That's one thing I meant when I asked about caveats: implementation warnings. Thanks. Are there other, more dependable, ways of making immutable objects? > I'm curious as to why you care if people add attributes to your > "immutable" class. Personally, I consider that instances of types > don't let me add attributes to be a wart. And this is another meaning: style caveats. I genuinely want to understand these issues. I refer you to a similar question: do you consider it a wart that you can't add attributes to instances of Python's built-in types? >>> foo = ("spam", "eggs") >>> foo.comment = "I love it." Traceback (most recent call last): File "<stdin>", line 1, in ? AttributeError: 'tuple' object has no attribute 'comment' >>> bar = 1 >>> bar.base = 10 Traceback (most recent call last): File "<stdin>", line 1, in ? AttributeError: 'int' object has no attribute 'base' Is this a wart? Why? If it's not a wart, why would it be a wart for user-defined types to have the same behaviour? -- \ "I spilled spot remover on my dog. Now he's gone." -- Steven | `\ Wright | _o__) | Ben Finney -- http://mail.python.org/mailman/listinfo/python-list