tl;dr: gebruik voor globale/publieke namen AllCaps
zoals XORcist zei:
class Logger: passAliasLogger = Logger
Voor functie parameters en functie locals, maak duidelijk dat je te maken hebt met het klasse object met een beschrijvende naam als deze:
def some_func(logger_class): pass
of iets in de trant van
def some_func(my_class_classobj): pass
wanneer het woord "class"
daadwerkelijk in je klasse naam staat. Zie voor classobj
ook class_
en klass
.
Analyse/Motivatie (lange versie)
Niet grondig gelezen, maar op het eerste gezicht lijkt PEP 8 hier niet expliciet over te zijn (noch de python stijlgids van google trouwens).
Omdat een variabelenaam waarschijnlijk gewoon de zoveelste naambinding in python is, maakt het volgens mij niet echt uit of je die naam bindt met het definitieblok of later met het =
gelijkheidsteken aan een of ander object.
Wat dat betreft ben ik het met XORcist eens dat “alias” verwijzingen op moduleniveau zich moeten houden aan de naamgevingsstandaard van je klasse, waarschijnlijk AllCaps:
class MyClass(object): pass# goodReferenceToClass = MyClass
Maar als het gaat om parameter- en variabelennamen, dan zou toch lowercase_underscores
moeten gelden, toch? Ik ben niet gelukkig met alleen dat, omdat het je in de instantie vs klasseverwijzing ambiguïteit duwt. Er is de mogelijkheid dat een naam met alleen kleine letters een poging is om te laten doorschemeren dat het object een instantie is. Wat dat betreft, raad ik aan om je variabele namen met allemaal kleine letters, die verwijzen naar een klasse, te voorzien van het “class” achtervoegsel, zoals dit:
class Logger(object): passdef function_expecting_class_reference(logger_class): pass
Ik hernoemde je voorbeeld klasse MyClass
naar Logger
omdat in echte scenario’s slechts enkele klasse namen de string "class"
bevatten. In dat laatste geval stel ik echter voor om de dubbelzinnigheid te vermijden door toch weer een beschrijvende naamgeving te gebruiken. U kunt bijvoorbeeld een classobj
achtervoegsel gebruiken: