Hi Laura,
On Sat, Dec 04, 2004 at 06:07:33PM +0100, Laura Creighton wrote:
> So -- do you really want me to use the properties? I now think they are
> icky.
Ick! Yes! People who use __getattr__() or __setattr__() should be shot
without even waiting for dawn. Basically, they don't cooperate well with the
whole new-style class mecanisms.
The issue of __slots__ vs no-__slots__ is related to: do we want to restrict
the attributes that file instances can have, or not? So far I'd say that
restricting them is a good idea, just because CPython does it too. Whether
CPython's restriction is to be regarded as an implementation wart or a real
planned feature is left open to python-dev's judgement, I guess.
This said, using attribute names like '_mode' on our file class might be a bad
idea because it could potentially conflict with someone's code, where 'file'
is subclassed and a '_mode' attribute is used for another purpose.
To minimize code duplication, note that a common "cookbook" recipe might help
(a replacement for 'property' which always reads/writes the data to the
__dict__ under the member's name):
class member(object):
def __init__(self, name, readonly=False):
self.__name__ = name
self.__readonly__ = readonly
def __get__(self, obj, cls=None):
if obj is not None:
return obj.__dict__[self.__name__]
else:
return self # XXX incomplete
def __set__(self, obj, value):
if self.__readonly__:
raise AttributeError, 'attribute %s is read-only' % (
self.__name__,)
obj.__dict__[self.__name__] = value
def __del__(self, obj):
if self.__readonly__:
raise AttributeError, 'attribute %s is read-only' % (
self.__name__,)
try:
del obj.__dict__[self.__name__]
except KeyError:
raise AttributeError, self.__name__
class file(object):
def __init__(self):
self.__dict__['mode'] = 'r+'
mode = member('mode', readonly=True)
My class member is still incomplete; it would be nice to have a full-featured
class member somewhere in PyPy. (It's missing unbound access, e.g.
'file.mode').
A bientot,
Armin.
_______________________________________________
[EMAIL PROTECTED]
http://codespeak.net/mailman/listinfo/pypy-dev