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:

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.