tl;dr : pour les noms globaux/publics, utilisez AllCaps
comme l’a dit XORcist :
class Logger: passAliasLogger = Logger
Pour les paramètres de fonction et les locaux de fonction, indiquez clairement que vous avez affaire à l’objet classe avec un nom descriptif comme ceci:
def some_func(logger_class): pass
ou quelque chose du genre
def some_func(my_class_classobj): pass
lorsque le mot "class"
est effectivement dans votre nom de classe. Pour classobj
, voir aussi class_
et klass
.
Analyse/Motivation (version longue)
Je n’ai pas lu en profondeur, mais d’un coup d’œil PEP 8 ne semble pas être explicite à ce sujet (ni le guide de style python de google d’ailleurs).
Puisqu’un nom de variable n’est probablement qu’une énième liaison de nom en python, à mon avis, il n’est pas vraiment important de savoir si vous liez ce nom avec le bloc de définition ou plus tard avec le signe =
égal à un objet quelconque.
Pour cela, je suis d’accord avec XORcist en ce que les références « alias » au niveau du module devraient adhérer à votre norme de nommage de classe, probablement AllCaps:
class MyClass(object): pass# goodReferenceToClass = MyClass
Cependant, quand il s’agit de paramètres et de noms de variables, soi-disant lowercase_underscores
devrait s’appliquer, non ? Je ne suis pas satisfait de seulement cela, car cela vous poussera dans l’ambiguïté de référence d’instance vs classe. Il y a le potentiel qu’un nom tout en minuscules peut être une tentative de faire allusion à l’objet étant une instance. Pour cette raison, je recommande de postfixer vos noms de variables tout en minuscules et faisant référence à une classe avec le suffixe « class », comme ceci:
class Logger(object): passdef function_expecting_class_reference(logger_class): pass
J’ai renommé votre exemple de classe MyClass
en Logger
parce que dans les scénarios réels, seuls quelques noms de classe contiennent la chaîne "class"
. Cependant, dans ce dernier cas, je propose d’éviter l’ambiguïté avec un nommage descriptif encore une fois. Par exemple, vous pouvez utiliser un suffixe classobj
: