t;dr: für globale/öffentliche Namen verwenden Sie AllCaps
wie XORcist sagte:
class Logger: passAliasLogger = Logger
Für Funktionsparameter und Funktionslokale machen Sie deutlich, dass es sich um das Klassenobjekt handelt, indem Sie einen beschreibenden Namen wie diesen verwenden:
def some_func(logger_class): pass
oder etwas in der Art von
def some_func(my_class_classobj): pass
, wenn das Wort "class"
tatsächlich in Ihrem Klassennamen enthalten ist. Für classobj
, siehe auch class_
und klass
.
Analyse/Motivation (lange Version)
Ich habe nicht gründlich gelesen, aber auf den ersten Blick scheint PEP 8 diesbezüglich nicht explizit zu sein (genauso wenig wie der Python Style Guide von Google).
Da ein Variablenname in Python wahrscheinlich nur eine weitere Namensbindung ist, spielt es meiner Meinung nach keine Rolle, ob man diesen Namen im Definitionsblock oder später mit dem =
Gleichheitszeichen an ein Objekt bindet.
Dafür stimme ich mit XORcist überein, dass „Alias“-Referenzen auf Modulebene sich an den Standard für Klassennamen halten sollten, wahrscheinlich AllCaps:
class MyClass(object): pass# goodReferenceToClass = MyClass
Wenn es aber um Parameter- und Variablennamen geht, sollte doch eigentlich lowercase_underscores
gelten, oder? Ich bin unglücklich darüber, da dies zu einer Mehrdeutigkeit zwischen Instanz- und Klassenreferenz führen würde. Es besteht die Möglichkeit, dass ein Name, der nur aus Kleinbuchstaben besteht, ein Versuch ist, darauf hinzuweisen, dass das Objekt eine Instanz ist. Aus diesem Grund empfehle ich, die Namen von Variablen, die auf Klassen verweisen, mit dem Suffix „class“ zu versehen, etwa so:
class Logger(object): passdef function_expecting_class_reference(logger_class): pass
Ich habe Ihre Beispielklasse MyClass
in Logger
umbenannt, weil in realen Szenarien nur wenige Klassennamen die Zeichenfolge "class"
enthalten. In diesem letzteren Fall schlage ich jedoch vor, die Mehrdeutigkeit durch eine beschreibende Benennung noch einmal zu vermeiden. Sie können zum Beispiel ein Suffix classobj
verwenden: