tl;dr: för globala/offentliga namn använd AllCaps
som XORcist sa:
class Logger: passAliasLogger = Logger
För funktionsparametrar och funktionslokaler, gör det tydligt att du har att göra med klassobjektet med ett beskrivande namn som detta:
def some_func(logger_class): pass
eller något i stil med
def some_func(my_class_classobj): pass
när ordet "class"
faktiskt finns i ditt klassnamn. För classobj
, se även class_
och klass
.
Analys/motivation (lång version)
Ingen grundlig läsning, men vid en överblick verkar PEP 8 inte vara explicit om detta (inte heller Googles python style guide för den delen).
Med tanke på att ett variabelnamn förmodligen bara är ännu en namnbindning i python spelar det enligt min mening ingen roll om du binder det namnet med definitionsblocket eller senare med =
likhetstecknet till något objekt.
För detta håller jag med XORcist om att ”alias”-referenser på modulnivå bör följa din standard för klassnamn, förmodligen AllCaps:
class MyClass(object): pass# goodReferenceToClass = MyClass
Men när det gäller namn på parametrar och variabler bör förmodligen lowercase_underscores
gälla, eller hur? Jag är missnöjd med bara det, eftersom det kommer att driva dig in i tvetydigheten mellan instans- och klassreferenser. Det finns en möjlighet att ett namn med små bokstäver kan vara ett försök att antyda att objektet är en instans. Därför rekommenderar jag att du efterställer dina variabelnamn med små bokstäver och klassreferenser med suffixet ”class”, som här:
class Logger(object): passdef function_expecting_class_reference(logger_class): pass
Jag döpte om din exempelklass MyClass
till Logger
eftersom det i verkliga scenarier bara är ett fåtal klassnamn som innehåller strängen "class"
. I det senare fallet föreslår jag dock att man undviker tvetydigheten med beskrivande namngivning ännu en gång. Du kan till exempel använda ett suffix classobj
:
.