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:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.