Ixokai wrote:

In what possible way is:

    setattr(foo, 'new_attr', 'blah')
    getattr(foo, 'new_attr')
    delattr(foo, 'new_attr')

Better then:

    foo.new_attr = 'blah'
    foo.new_attr
    del foo.new_attr

I don't understand what your argument is or problem is with the regular syntax, if you want to allow the former (all of which is currently possible in Python if you prefer this style) but not the latter (all of which also works, it just uses normal syntax as everyone would expect).

Do you think it should be somehow "tricky" or "more difficult" to dynamically modify an instance at runtime? For that to hold, you have to provide some pretty compelling reasoning why dynamically modifying an instance at runtime is Not Good. Only then is there a good reason to make it more difficult. (Since Python doesn't really restrict things, just makes certain rare things that are undesirable a little harder to do)

--Stephen


While I personally don't agree with this proposal (but I understand why some people might want it), I can see a reason.

When disallowing direct attribute creation, those typos that seem to catch newcommers won't happen anymore. What I mean is this:

class Foo(object):
    def __init__(self):
        self.somearg = 0

f = Foo()
f.soemarg = 42

---^ There, typo, but still working

It's something like a custom __setattr__ that errors out when trying to assign to an attribute that doesn't exists, just as default behavior.

Sure, unittest are the Right Way(tm) to handle this, but there is a learning curve for new programmers wrt unittest. And disallowing this, doesn't take away any dynamism since setattr and friends are still there.

Anyway, since I do a lot interactive programming I don't want it. It would hinder me a lot.
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to