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:

.

Lämna ett svar

Din e-postadress kommer inte publiceras.