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:

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.