python – Why do some functions have underscores __ before and after the function name?

python – Why do some functions have underscores __ before and after the function name?

From the Python PEP 8 — Style Guide for Python Code:

Descriptive: Naming Styles

The following special forms using leading or trailing underscores are
recognized (these can generally be combined with any case convention):

  • _single_leading_underscore: weak internal use indicator. E.g. from M import * does not import objects whose name starts with an underscore.

  • single_trailing_underscore_: used by convention to avoid conflicts with Python keyword, e.g.

    Tkinter.Toplevel(master, class_=ClassName)

  • __double_leading_underscore: when naming a class attribute, invokes name mangling (inside class FooBar, __boo becomes _FooBar__boo; see below).

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

Note that names with double leading and trailing underscores are essentially reserved for Python itself: Never invent such names; only use them as documented.

The other respondents are correct in describing the double leading and trailing underscores as a naming convention for special or magic methods.

While you can call these methods directly ([10, 20].__len__() for example), the presence of the underscores is a hint that these methods are intended to be invoked indirectly (len([10, 20]) for example). Most python operators have an associated magic method (for example, a[x] is the usual way of invoking a.__getitem__(x)).

python – Why do some functions have underscores __ before and after the function name?

Names surrounded by double underscores are special to Python. Theyre listed in the Python Language Reference, section 3, Data model.

Leave a Reply

Your email address will not be published. Required fields are marked *