design question: no new attributes

Bruno Desthuilliers bdesth.quelquechose at free.quelquepart.fr
Thu Mar 1 18:25:12 EST 2007


Alan Isaac a écrit :
> The security application seems to call for roles.

Considering that a role is a set of permissions in a context. The 
application doesn't want to say "you need this role", but "you need to 
have a role that has this permission" (nb : this is based on Zope's 
security model).

> I'll have to think about the schema example.
> But in any case, my question was poorly stated.
> I started out wanting to trap was the dynamic
> addition of attributes to class instances after
> initialization.

 From withing methods of the class, or from the outside world ? In the 
first case, pylint is what you're looking for.

> While you responded to my later question
> as asked, the response does not I think take this context
> into account.

Of course - this was not what I was answering to !-)

Now, in the above context, I still don't think your solution is the best 
option.

> 
>>As a side note :  in Python, *all* attributes are "dynamically created".
>>... Writing methods
>>within the class statement body makes things clearer, but is by no mean
>>mandatory:
> 
> 
> Point taken.  And I understand it means that my talk of
> "after initialization" above contains some ambiguity.

Indeed !-)

> One last point. While I remain interested in examples of how
> "late" addition of attributes to class instances is useful,

Then read the sources of packages / frameworks like SQLAlchemy, 
SQLObject, FormEncode, CherryPy, TurboGears, Django, etc - and probably 
a lot of other.

Heck, FWIW, modules are objects too - instances of class 'module', and 
all the top-level names of a module are de facto examples of "late 
addition of attributes to a class instance" !-)

> I must note that everyone who responded agreed that it
> has been a source of bugs.

Yes, of course - typos happens. But I've seen much more bugs introduced 
by all the boilerplate and complexities needed to work around arbitrary 
restrictions imposed by some well-known mainstream languages.

My experience with Python is that typos, type errors and all this class 
of programmer error are usually *very* quickly noticed (ie : within 
minutes).

> This seems to argue against a
> general ban on "locking" objects in some way, in some
> circumstances.

I'd rather go for better (well... pylint is already a pretty nice tool) 
code checkers.

My 2 cents...



More information about the Python-list mailing list