Add lists to class?
Paolino
paolo_veronelli at tiscali.it
Fri Sep 2 08:45:19 EDT 2005
Mike Meyer wrote:
> "BBands" <bbands at gmail.com> writes:
>
>
>>I have a list with some strings in in it, 'one', 'two' 'three' and so
>>on. I would like to add lists to a class with those names. I have no
>>way of knowing what will be in the list or how long the list will be in
>>advance.
>
>
> Others have told you how to do it. Now I'm going to tell you why you
> shouldn't.
>
> First, since you don't know the names of the attributes you added, you
> can't possibly write code that references them in the normal way. So
> is there really much point in making them an attribute at all?
>
> Second, since you don't know the names of the attributes you added,
> you don't know if one of more of them is going to clobber a feafure of
> the class that you want to use for something else. I.e., consider:
>
>
>>>>class C:
>
> ... pass
> ...
>
>>>>c = C()
>>>>print c
>
> <__main__.C instance at 0x8270b4c>
>
>>>>c.__str__ = 'foo'
>>>>print c
>
> Traceback (most recent call last):
> File "<stdin>", line 1, in ?
> TypeError: 'str' object is not callable
>
>
> I.e. - if someone adds a __str__ attribute to your class, you won't be
> able to print it any more. Not a good thing.
>
> In general, you probably want a dictionary instead of attributes:
>
>
>>>>class C(dict):
>
> ... def __init__(self, l):
> ... for i in l:
> ... self[i] = []
> ...
>
>>>>c = C(['a', 'b', 'c'])
>>>>c['a']
>
> []
>
and 2c more to use attributes but prevent overriding of real attributes
def __getattr__(self,name):
if name in self:
return self[name]
raise AttributeError
Paolino
___________________________________
Yahoo! Mail: gratis 1GB per i messaggi e allegati da 10MB
http://mail.yahoo.it
More information about the Python-list
mailing list