tl;dr: for globale/offentlige navne skal du bruge AllCaps
, som XORcist sagde:
class Logger: passAliasLogger = Logger
For funktionsparametre og funktionslokaler skal du gøre det klart, at du har med klasseobjektet at gøre med et beskrivende navn som dette:
def some_func(logger_class): pass
eller noget i den retning
def some_func(my_class_classobj): pass
når ordet "class"
faktisk er i dit classname. For classobj
, se også class_
og klass
.
Analyse/Motivation (lang version)
Ingen grundig læsning, men ved et øjekast ser PEP 8 ikke ud til at være eksplicit om dette (heller ikke googles python-stilguide for den sags skyld).
Da et variabelnavn nok bare er endnu en navnebinding i python, er det efter min mening ligegyldigt, om du binder det navn med definitionsblokken eller senere med =
lighedstegnet til et eller andet objekt.
For dette er jeg enig med XORcist i, at referencer til “alias” på modulniveau bør overholde din standard for navngivning af klasser, sandsynligvis AllCaps:
class MyClass(object): pass# goodReferenceToClass = MyClass
Men når det kommer til parameter- og variabelnavne, bør angiveligt lowercase_underscores
gælde, ikke? Jeg er utilfreds med kun det, da det vil skubbe dig ind i instans vs. klassereference tvetydigheden. Der er mulighed for at et navn udelukkende med små bogstaver kan være et forsøg på at antyde, at objektet er en instans. For den sags skyld anbefaler jeg, at du postfixerer dine alle små bogstaver, klasse-refererende variabelnavne med “class”-suffiks, som her:
class Logger(object): passdef function_expecting_class_reference(logger_class): pass
Jeg omdøbte din eksempelklasse MyClass
til Logger
, fordi der i virkelige scenarier kun er få klasse-navne, der indeholder strengen "class"
. Men i sidstnævnte tilfælde foreslår jeg at undgå tvetydigheden med beskrivende navngivning endnu en gang. Du kan f.eks. bruge et classobj
-suffiks: