DEV Community

Super Kai (Kazuya Ito)
Super Kai (Kazuya Ito)

Posted on • Edited on

Underscore in Python (1)

Buy Me a Coffee

*Memo:

  • My post explains the single, double and triple leading and trailing underscore with variables, functions and classes.
  • My post explains the single, double and triple leading and trailing underscore with the variables, functions and classes in a function.
  • My post explains naming convention.

A single, double and triple leading and trailing underscore can be used with the variables, methods and classes in a class:

*Memo:

  • A single leading underscore(_abc) can make the unforced private attributes(variables, methods and classes) in a class which are basically used in a class so they're still acceptable from the outside of the class.
  • A double leading underscore(__abc) can make the forced private attributes in a class which are only used in the class so it's unacceptable from the outside of the class.
  • A double leading and trailing underscore(__abc__) can make the special public attributes which are used in and out a class, e.g. __init__, __class__, __name__, etc.
  • A single trailing underscore(abc_) is used to prevent identifier conflicts when using the identifiers (including reserved keywords) which already exist, e.g. var_, func_, len_, list_, int_, True_, def_, class_, etc.
  • S is single as the 1st character.
  • D is double as the 1st character.
  • T is triple as the 1st character.
  • L is leading as the 2nd character.
  • T is trailing as the 2nd character.
  • U is underscore or underscores as the 3rd character.

<The variables in a class>:

class Cls: _var = "_var" # SLU (Acceptable)  __var = "__var" # DLU (Unacceptable)  ___var = "___var" # TLU (Unacceptable)  var_ = "var_" # STU (Acceptable)  var__ = "var__" # DTU (Acceptable)  var___ = "var___" # TTU (Acceptable)  _var_ = "_var_" # SLU & STU (Acceptable)  __var_ = "__var_" # DLU & STU (Unacceptable)  ___var_ = "___var_" # TLU & STU (Unacceptable)  _var__ = "_var__" # SLU & DTU (Acceptable)  __var__ = "__var__" # DLU & DTU (Acceptable)  ___var__ = "___var__" # TLU & DTU (Acceptable)  _var___ = "_var___" # SLU & TTU (Acceptable)  __var___ = "__var___" # DLU & TTU (Acceptable)  ___var___ = "___var___" # TLU & TTU (Acceptable)  cls = Cls() print(cls._var) # _var print(cls.__var) # Error print(cls.___var) # Error print(cls.var_) # var_ print(cls.var__) # var__ print(cls.var___) # var___ print(cls._var_) # _var_ print(cls.__var_) # Error print(cls.___var_) # Error print(cls._var__) # _var__ print(cls.__var__) # __var__ print(cls.___var__) # ___var__ print(cls._var___) # _var___ print(cls.__var___) # __var___ print(cls.___var___) # ___var___ 
Enter fullscreen mode Exit fullscreen mode

<The methods in a class>:

class Cls: def _func(self): pass # SLU (Acceptable)  def __func(self): pass # DLU (Unacceptable)  def ___func(self): pass # TLU (Unacceptable)  def func_(self): pass # STU (Acceptable)  def func__(self): pass # DTU (Acceptable)  def func___(self): pass # TTU (Acceptable)  def _func_(self): pass # SLU & STU (Acceptable)  def __func_(self): pass # DLU & STU (Unacceptable)  def ___func_(self): pass # TLU & STU (Unacceptable)  def _func__(self): pass # SLU & DTU (Acceptable)  def __func__(self): pass # DLU & DTU (Acceptable)  def ___func__(self): pass # TLU & DTU (Acceptable)  def _func___(self): pass # SLU & TTU (Acceptable)  def __func___(self): pass # DLU & TTU (Acceptable)  def ___func___(self): pass # TLU & TTU (Acceptable)  cls = Cls() print(cls._func.__name__) # _func print(cls.__func.__name__) # Error print(cls.___func.__name__) # Error print(cls.func_.__name__) # func_ print(cls.func__.__name__) # func__ print(cls.func___.__name__) # func___ print(cls._func_.__name__) # _func_ print(cls.__func_.__name__) # Error print(cls.___func_.__name__) # Error print(cls._func__.__name__) # _func__ print(cls.__func__.__name__) # __func__ print(cls.___func__.__name__) # ___func__ print(cls._func___.__name__) # _func___ print(cls.__func___.__name__) # __func___ print(cls.___func___.__name__) # ___func___ 
Enter fullscreen mode Exit fullscreen mode

<The classes in a class>:

class Cls: class _Cls: pass # SLU (Acceptable)  class __Cls: pass # DLU (Unacceptable)  class ___Cls: pass # TLU (Unacceptable)  class Cls_: pass # STU (Acceptable)  class Cls__: pass # DTU (Acceptable)  class Cls___: pass # TTU (Acceptable)  class _Cls_: pass # SLU & STU (Acceptable)  class __Cls_: pass # DLU & STU (Unacceptable)  class ___Cls_: pass # TLU & STU (Unacceptable)  class _Cls__: pass # SLU & DTU (Acceptable)  class __Cls__: pass # DLU & DTU (Acceptable)  class ___Cls__: pass # TLU & DTU (Acceptable)  class _Cls___: pass # SLU & TTU (Acceptable)  class __Cls___: pass # DLU & TTU (Acceptable)  class ___Cls___: pass # TLU & TTU (Acceptable)  cls = Cls() print(cls._Cls().__class__.__name__) # _Cls print(cls.__Cls().__class__.__name__) # Error print(cls.___Cls().__class__.__name__) # Error print(cls.Cls_().__class__.__name__) # Cls_ print(cls.Cls__().__class__.__name__) # Cls__ print(cls.Cls___().__class__.__name__) # Cls___ print(cls._Cls_().__class__.__name__) # _Cls_ print(cls.__Cls_().__class__.__name__) # Error print(cls.___Cls_().__class__.__name__) # Error print(cls._Cls__().__class__.__name__) # _Cls__ print(cls.__Cls__().__class__.__name__) # __Cls__ print(cls.___Cls__().__class__.__name__) # ___Cls__ print(cls._Cls___().__class__.__name__) # _Cls___ print(cls.__Cls___().__class__.__name__) # __Cls___ print(cls.___Cls___().__class__.__name__) # ___Cls___ 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)