Sarir said:
Here are my questions:
<SNIP>
3) Should private data be written as self._x instead of self.x?
This is a long standing debate. The usual answer is "we are all grownups here", meaning that self.x is preferred. However, I personally like self._x to let potential users of my code know that I intended it to be private.
<SNIP>
James
My understanding is that there is no such thing as true privacy with Python, since you can always access self._name and self.__mangled_name if you want to. (Though the later way of naming makes it a bit difficult so as to strongly indicate it is discouraged Example below.) Instead of private names, think of them as shy :-)
But I don't think it is correct to say the self.x form is preferred. Some support tools, notably pydoc, understand convention that single and double leading underscores means the name is shy and respect it:
>>> class Shy: '''My silly example''' def _shy_method(self): '''I'm a shy docstring''' pass def public_method(self): '''I'm a public docstring''' pass def __mangled_method(self): '''I'm quite shy and a bit of a challenge to call''' print "I've been mangled!"
>>> help(Shy) Help on class Shy in module __main__:
class Shy | My silly example | | Methods defined here: | | public_method(self) | I'm a public docstring
You can still use pydoc on the shy methods, though:
>>> help(Shy._shy_method) Help on method _shy_method in module __main__:
_shy_method(self) unbound __main__.Shy method I'm a shy docstring
>>> # calling a mangled method name from outside the class >>> shy = Shy() >>> shy.__mangled_method()
Traceback (most recent call last): File "<pyshell#25>", line 1, in -toplevel- shy.__mangled_method() AttributeError: Shy instance has no attribute '__mangled_method' >>> shy._Shy__mangled_method() Ive been mangled! >>>
Best,
Brian vdB
-- http://mail.python.org/mailman/listinfo/python-list