tl;dr: globaaleille/julkisille nimille käytä AllCaps
kuten XORcist sanoi:
class Logger: passAliasLogger = Logger
Funktioparametreille ja funktioiden lokaaleille tee selväksi, että olet tekemisissä luokkaobjektin kanssa kuvaavalla nimellä kuten tämä:
def some_func(logger_class): pass
tai jotain tämän suuntaista
def some_func(my_class_classobj): pass
kun sana "class"
on itse asiassa luokkanimessäsi. For classobj
, see also class_
and klass
.
Analyysi/Motivaatio (pitkä versio)
En ole lukenut perusteellisesti, mutta yhdellä silmäyksellä PEP 8 ei näytä olevan eksplisiittinen tästä (eikä myöskään Googlen python-tyyliopas muutenkaan).
Koska muuttujan nimi lienee pythonissa vain vielä yksi nimen sitominen, ei mielestäni ole oikeastaan väliä sitooko tuon nimen määrittelylohkolla vai myöhemmin =
yhtäläisyysmerkillä johonkin objektiin.
Sen suhteen olen samaa mieltä XORcistin kanssa, että moduulitason ”alias”-viittausten tulisi noudattaa luokkien nimeämisstandardiasi, luultavasti AllCaps:
class MyClass(object): pass# goodReferenceToClass = MyClass
Mutta kun kyse on parametrien ja muuttujien nimistä, niin oletettavasti lowercase_underscores
:n pitäisi päteä, eikö? Olen tyytymätön vain tuohon, koska se työntää sinut instanssi vs. luokkaviittaus -epämääräisyyteen. On mahdollista, että kaikki pienet kirjaimet sisältävällä nimellä yritetään vihjata, että objekti on instanssi. Sen vuoksi suosittelen, että kaikki pienaakkoset, luokkiin viittaavat muuttujien nimet postfixataan ”class”-liitteellä, esimerkiksi näin:
class Logger(object): passdef function_expecting_class_reference(logger_class): pass
Nimesin esimerkkiluokkasi MyClass
uudelleen Logger
:ksi, koska todellisissa skenaarioissa vain harva luokan nimi sisältää merkkijonon "class"
. Tuossa jälkimmäisessä tapauksessa ehdotan kuitenkin, että epäselvyys vältetään jälleen kerran kuvaavalla nimeämisellä. Voit esimerkiksi käyttää päätettä classobj
:
.