tl;dr: per i nomi globali/pubblici usate AllCaps
come ha detto XORcist:
class Logger: passAliasLogger = Logger
Per i parametri di funzione e i locali di funzione, rendete chiaro che avete a che fare con l’oggetto classe con un nome descrittivo come questo:
def some_func(logger_class): pass
o qualcosa del genere
def some_func(my_class_classobj): pass
quando la parola "class"
è effettivamente nel vostro classname. Per classobj
, vedi anche class_
e klass
.
Analisi/Motivazione (versione lunga)
Nessuna lettura approfondita, ma a colpo d’occhio PEP 8 non sembra essere esplicito su questo (né la guida di stile di google per quella materia).
Poiché un nome di variabile è probabilmente solo un altro nome vincolante in python, secondo me non ha molta importanza se si lega quel nome con il blocco di definizione o dopo con il segno =
uguale a qualche oggetto.
Per questo sono d’accordo con XORcist nel fatto che i riferimenti “alias” a livello di modulo dovrebbero aderire al vostro standard di denominazione delle classi, probabilmente AllCaps:
class MyClass(object): pass# goodReferenceToClass = MyClass
Ma quando si tratta di nomi di parametri e variabili, presumibilmente lowercase_underscores
dovrebbe applicarsi, giusto? Sono insoddisfatto solo di questo, dal momento che vi spingerà nell’ambiguità tra istanza e riferimento alla classe. C’è il potenziale che un nome tutto minuscolo possa essere un tentativo di suggerire che l’oggetto sia un’istanza. Per questo motivo, raccomando di postfissare i vostri nomi di variabili tutti minuscoli e che fanno riferimento alla classe con il suffisso “class”, come questo:
class Logger(object): passdef function_expecting_class_reference(logger_class): pass
Ho rinominato la vostra classe di esempio MyClass
in Logger
perché negli scenari reali solo alcuni nomi di classe contengono la stringa "class"
. Tuttavia in quest’ultimo caso propongo di evitare ancora l’ambiguità con una denominazione descrittiva. Per esempio, si può usare un suffisso classobj
: