Take the 2-minute tour ×

In cherryPy for example, there are files like:

  • __init__.py
  • _cptools.py

How are they different? What does this mean?

share|improve this question

3 Answers 3

up vote 7 down vote accepted

__...__ 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.

share|improve this answer
You are not expressly forbidden from inventing your own names. It is discouraged because the language might add more such names in the future, so the namespace is reserved. Using __...__ names for your own projects is at your own risk. –  Martijn Pieters Aug 30 '12 at 8:15
@MartijnPieters: ok, replaced that with 'shouldn't'. –  Michał Górny Aug 30 '12 at 8:16

__init__.py is a special file that, when existing in a folder turns that folder into module. Upon importing the module, __init__.py gets executed. The other one is just a naming convention but I would guess this would say that you shouldn't import that file directly.

Take a look here: 6.4. Packages for an explanation of how to create modules.

General rule: If anything in Python is namend __anything__ then it is something special and you should read about it before using it (e.g. magic functions).

share|improve this answer

These, and other, naming conventions are described in detail in Style Guide for Python Code - Descriptive: Naming Styles


  • __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.
share|improve this answer

Your Answer


