Modifying the {} and [] tokens

Seo Sanghyeon unendliche at
Sun Aug 24 02:33:19 CEST 2003

Geoff Howland asked:
(about extending builtin literal types.)

You _could_ do that in Python 2.2, though it was a bug, not a feature.

Python 2.2
>>> def add(self, key, value):
        self[key] = value
>>> dict.add = add
TypeError: can't set attributes of built-in/extension type 'dict'
>>> object.__setattr__(dict, "add", add) # !!
>>> x = {}
>>> x.add(1, 1)
>>> x
{1: 1}

Don't tell others that I said this.

Why this is a bug, not a feature? I think that is because Python is not
Ruby. Another evidence is that this behaviour is _fixed_ in Python 2.3:

Python 2.3
>>> object.__setattr__(dict, "add", add)
TypeError: can't apply this __setattr__ to type object

Obviously somebody put a sanity check there.

Seo Sanghyeon

More information about the Python-list mailing list