Edward Elliott wrote: > Panos Laganakos wrote: >> i.e. we usually define private properties and provide public functions >> to access them, in the form of: >> get { ... } set { ... } >> >> Should we do the same in Python: >> Or there's no point in doing so? >> >> Some other techniques come to mind, but I think that Python tends to >> allow the programmer to access stuff he wants even though he shouldn't >> or in the form of a dict or list, rather than a method to do so. > > There's no point. Private access can only be advisory anyway -- there are > ways around it in every language. Convention serves just as well, people > know that touching _foo is done at their own risk. It's not creating > extra hoops to jump through the few times you really do need to touch a > private var. > > Others already mentioned how to transparently change attributes to > properties. > > If you're worried about enforcing restrictions in your code base, get a > lint checker to flag any expression of the form name._foo where name isn't > 'self'. Yes you can still access _foo other ways, but you'll never get > perfect enforcement anyway. Maybe the extra step will make you think > twice, if that's what you want (and it seems to be).
-- What then is the point of the double underscore (if any) ?: In [2]:class test: .2.: _one_underscore=1 .2.: __two_underscores=2 .2.: In [3]:t = test() In [4]:t._one_underscore=2 In [5]:t.__two_underscores=3 In [6]:t.__two_underscores Out[6]:3 In [7]:dir (test) Out[7]:['__doc__', '__module__', '_one_underscore', '_test__two_underscores'] In [8]:test._one_underscore Out[8]:1 In [9]:test.__two_underscores --------------------------------------------------------------------------- exceptions.AttributeError Traceback (most recent call last) /home/philippe/<ipython console> AttributeError: class test has no attribute '__two_underscores' ------------------------- "Poignée trop essorée, moulin bien rincé" Pierre Lafouine --------------------------- -- http://mail.python.org/mailman/listinfo/python-list