DEV Community

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

Posted on

Naming convention in Python

Buy Me a Coffee

*Memo:

  • My post explains an identifier.
  • My post explains the single, double and triple leading and trailing underscore with the variables, methods and classes in a class.
  • My post explains a variable assignment.
  • My post explains a function (1).

A class name should be CapWords(PascalCase) as shown below:

class Cls: pass
class MyCls: pass
class MyFirstCls: pass
Enter fullscreen mode Exit fullscreen mode

A variable and function name should be lower_snake_case as shown below:

var = 'abc'
my_var = 'abc'
my_first_var = 'abc'
Enter fullscreen mode Exit fullscreen mode
def func(): pass
def my_func(): pass
def my_first_func(): pass
Enter fullscreen mode Exit fullscreen mode

A constant name should be UPPER_SNAKE_CASE as shown below:

PI = 3.141592653589793
E = 2.718281828459045
MIN_NUM = 0
MAX_NUM = 100
MY_MIN_NUM = 0
MY_MAX_NUM = 100
Enter fullscreen mode Exit fullscreen mode

A module name should be short and lower-case, and separated with underscores if improving readability as shown below:

my1stmod.py
my_1st_mod.py
myfirstmodule.py
my_first_module.py
Enter fullscreen mode Exit fullscreen mode
import my1stmod
import my_1st_mod
import myfirstmodule
import my_first_module
Enter fullscreen mode Exit fullscreen mode

A package name should be short and lower-case, and separated with underscores if really improving readability as shown below:

*Memo:

  • Basically, underscores shouldn't be used.
my1stpkg
my_1st_pkg
myfirstpackage
my_first_package
Enter fullscreen mode Exit fullscreen mode
import my1stpkg
import my_1st_pkg
import myfirstpackage
import my_first_package
Enter fullscreen mode Exit fullscreen mode

A single, double and triple leading and trailing underscore can be used with variables, methods and classes as shown below:

*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.
class Cls:
    _var = "_var"            # (Acceptable)
    __var = "__var"          # (Unacceptable)
    var_ = "var_"            # (Acceptable)
    __var__ = "__var__"      # (Acceptable)

    def _func(self): pass    # (Acceptable)
    def __func(self): pass   # (Unacceptable)
    def func_(self): pass    # (Acceptable)
    def __func__(self): pass # (Acceptable)

    class _Cls: pass         # (Acceptable)
    class __Cls: pass        # (Unacceptable)
    class Cls_: pass         # (Acceptable)
    class __Cls__: pass      # (Acceptable)

cls = Cls()

print(cls._var)                         # _var
print(cls.__var)                        # Error
print(cls.var_)                         # var_
print(cls.__var__)                      # __var__

print(cls._func.__name__)               # _func
print(cls.__func.__name__)              # Error
print(cls.func_.__name__)               # func_
print(cls.__func__.__name__)            # __func__

print(cls._Cls().__class__.__name__)    # _Cls
print(cls.__Cls().__class__.__name__)   # Error
print(cls.Cls_().__class__.__name__)    # Cls_
print(cls.__Cls__().__class__.__name__) # __Cls__
Enter fullscreen mode Exit fullscreen mode

Top comments (0)