tl;dr: pro globální/veřejné názvy použijte AllCaps
, jak řekl XORcist:
class Logger: passAliasLogger = Logger
Pro parametry funkcí a lokální názvy funkcí dejte jasně najevo, že máte co do činění s objektem třídy, popisným názvem, jako je tento:
def some_func(logger_class): pass
nebo něco ve smyslu
def some_func(my_class_classobj): pass
pokud je v názvu třídy skutečně slovo "class"
. Pro classobj
viz také class_
a klass
.
Analýza/Motivace (dlouhá verze)
Nemám to důkladně přečtené, ale na první pohled se zdá, že PEP 8 se k tomu explicitně nevyjadřuje (ostatně ani průvodce stylem Pythonu od Googlu).
Protože jméno proměnné je v pythonu nejspíš jen další vazba na jméno, je podle mě úplně jedno, jestli to jméno navážeš s definičním blokem nebo později pomocí =
rovnítka na nějaký objekt.
Pro to souhlasím s XORcistem v tom, že odkazy na „alias“ na úrovni modulu by se měly držet vašeho standardu pojmenování tříd, pravděpodobně AllCaps:
class MyClass(object): pass# goodReferenceToClass = MyClass
Jinak pokud jde o názvy parametrů a proměnných, měl by prý platit lowercase_underscores
, ne? Jen to se mi nelíbí, protože vás to bude tlačit do nejednoznačnosti instance vs. reference na třídu. Existuje možnost, že název psaný všemi malými písmeny může být pokusem naznačit, že objekt je instancí. Z tohoto důvodu doporučuji postfixovat vaše celá malá písmena v názvech proměnných odkazujících na třídy koncovkou „class“, například takto:
class Logger(object): passdef function_expecting_class_reference(logger_class): pass
Přejmenoval jsem vaši ukázkovou třídu MyClass
na Logger
, protože v reálných scénářích jen málokterý název třídy obsahuje řetězec "class"
. Nicméně v tom druhém případě navrhuji, abychom se nejednoznačnosti pomocí popisného pojmenování ještě jednou vyhnuli. Můžete například použít příponu classobj
:
.