On 14 April 2016 at 20:38, Albert-Jan Roskam <[email protected]> wrote:
> Hi,
>
> Lately I have been using the "mutable namedtuple" shown below a lot. I found
> it somewhere on StackOverflow or ActiveState or something.
> In its original form, it only had an __init__ method.
I don't know about your copy/deepcopy stuff. It looked fine to me but
I'm not very experienced in that area. I wonder what this mutable
namedtuple is for though.
Looking at it:
> class Record(dict):
>
> def __init__(self, *args, **kwargs):
> super(Record, self).__init__(*args, **kwargs)
> self.__dict__ = self
It's not so much a mutable namedtuple as an "attribute dict". It's a
dict whose keys can be accessed as attributes - because it is its own
instance dict. Of course it also has dict attributes like pop, items
etc. (see dir(dict) for a list). The reason that dicts use d[k] rather
than d.k for accessing keys is to be able to store arbitrary keys
without conflicting with the dict's methods which are attributes.
A namedtuple is something very different. It subclasses tuple and the
whole idea is that an instance is lightweight (not having an attribute
dict) and hashable and imutable etc. A mutable version of that might
just look like:
class Point(object):
# No instance dict:
__slots__ = ['x', 'y']
def __init__(self, x, y):
self.x = x
self.y = y
It depends what you really want it for though.
--
Oscar
_______________________________________________
Tutor maillist - [email protected]
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor