tl;dr: pentru nume globale/publice folosiți AllCaps
așa cum a spus XORcist:
class Logger: passAliasLogger = Logger
Pentru parametrii funcțiilor și localurile funcțiilor, clarificați faptul că aveți de-a face cu obiectul de clasă cu un nume descriptiv ca acesta:
def some_func(logger_class): pass
sau ceva de genul
def some_func(my_class_classobj): pass
când cuvântul "class"
este de fapt în numele clasei. Pentru classobj
, vezi și class_
și klass
.
Analiză/Motivație (versiunea lungă)
Nu am citit temeinic, dar la prima vedere PEP 8 nu pare să fie explicit în această privință (nici ghidul de stil python al Google, de altfel).
Din moment ce un nume de variabilă este probabil doar încă o altă legare de nume în python, în opinia mea nu prea contează dacă legați acel nume cu blocul de definiție sau mai târziu cu semnul =
egal la un obiect oarecare.
Pentru aceasta sunt de acord cu XORcist în sensul că referințele „alias” la nivel de modul ar trebui să adere la standardul de denumire a clasei dumneavoastră, probabil AllCaps:
class MyClass(object): pass# goodReferenceToClass = MyClass
Cu toate acestea, când vine vorba de nume de parametri și variabile, se presupune că ar trebui să se aplice lowercase_underscores
, nu? Sunt nemulțumit doar de acest lucru, deoarece vă va împinge în ambiguitatea referinței de instanță vs. referință de clasă. Există posibilitatea ca un nume cu toate minusculele să fie o încercare de a sugera că obiectul este o instanță. În acest sens, vă recomand să postfixați numele variabilelor care fac referire la clase, toate în minuscule, cu sufixul „class”, astfel:
class Logger(object): passdef function_expecting_class_reference(logger_class): pass
Am redenumit clasa de exemplu MyClass
în Logger
deoarece în scenariile reale doar câteva nume de clasă conțin șirul "class"
. Cu toate acestea, în acest din urmă caz, propun să evităm încă o dată ambiguitatea cu o denumire descriptivă. De exemplu, puteți utiliza un sufix classobj
:
.