In cherryPy
for example, there are files like:
__init__.py
_cptools.py
How are they different? What does this mean?
The leading double underscore tells the Python interpreter to rewrite the name in order to avoid conflict in a subclass. Interpreter changes variable name with class extension and that feature known as the Mangling.
The underscore prefix is meant as a hint to another programmer that a variable or method starting with a single underscore is intended for internal use. This convention is defined in PEP 8. This isn't enforced by Python. Python does not have strong distinctions between “private” and “public” variables like Java does.
Underscores can be used in the module name if it improves readability. Python packages should also have short, all-lowercase names, although the use of underscores is discouraged.
__var__ : double leading and trailing underscore variables (at least two leading and trailing underscores). Also called dunders. This naming convention is used by python to define variables internally. Avoid using this convention to prevent name conflicts that could arise with python updates.
__...__
means reserved Python name (both in filenames and in other names). You shouldn't invent your own names using the double-underscore notation; and if you use existing, they have special functionality.
In this particular example, __init__.py
defines the 'main' unit for a package; it also causes Python to treat the specific directory as a package. It is the unit that will be used when you call import cherryPy
(and cherryPy
is a directory). This is briefly explained in the Modules tutorial.
Another example is the __eq__
method which provides equality comparison for a class. You are allowed to call those methods directly (and you use them implicitly when you use the ==
operator, for example); however, newer Python versions may define more such methods and thus you shouldn't invent your own __
-names because they might then collide. You can find quite a detailed list of such methods in Data model docs.
_...
is often used as 'internal' name. For example, modules starting with _
shouldn't be used directly; similarly, methods with _
are supposedly-private and so on. It's just a convention but you should respect it.
These, and other, naming conventions are described in detail in Style Guide for Python Code - Descriptive: Naming Styles
Briefly:
__double_leading_and_trailing_underscore__
: "magic" objects or attributes that live in user-controlled namespaces. E.g.__init__
, __import__
or __file__
. Never invent such names; only use them as documented._single_leading_underscore
: weak "internal use" indicator. E.g. from M import *
does not import objects whose name starts with an underscore.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