*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
A variable and function name should be lower_snake_case as shown below:
var = 'abc'
my_var = 'abc'
my_first_var = 'abc'
def func(): pass
def my_func(): pass
def my_first_func(): pass
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
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
import my1stmod
import my_1st_mod
import myfirstmodule
import my_first_module
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
import my1stpkg
import my_1st_pkg
import myfirstpackage
import my_first_package
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__
Top comments (0)