I have seen code in which functions/constants are prefixed with underscores. My understanding is that this indicates that they are not to be used directly. Can I do this with classes ?
class _Foo(object):
pass
class __Bar(object):
pass
Better only use one _
. This indicates that a name is private within a module.
It is not imported with the catch-all from <module> import *
, and it has some other features such as "preferred destruction".
From here:
If
__all__
is not defined, the set of public names includes all names found in the module’s namespace which do not begin with an underscore character ('_
').
From here:
Starting with version 1.5, Python guarantees that globals whose name begins with a single underscore are deleted from their module before other globals are deleted.
Double-underscore starting class members are name-mangled.
Yes; the single underscore usage is endorsed by PEP8 for internal-use classes.
I don't believe the double underscore usage will have any real effect most of the time, since it's used to active name mangling for class attributes, and generally a class isn't an attribute of another class (granted, it can be, in which case Python will happily mangle the name for you.)
Yes, and this is not only a convention. When you import *
from this module, names starting with underscore will not be imported.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With