tl;dr: a globális/nyilvános nevekhez használd a AllCaps
-t, ahogy XORcist mondta:
class Logger: passAliasLogger = Logger
Függvényparaméterek és függvénylokálok esetében tegye egyértelművé, hogy az osztályobjektumról van szó, egy ilyen leíró névvel, mint ez:
def some_func(logger_class): pass
vagy valami hasonlóval
def some_func(my_class_classobj): pass
mikor a "class"
szó valójában az osztálynévben van. A classobj
-hoz lásd még class_
és klass
.
Analízis/Motiváció (hosszú változat)
Nem olvastam alaposan, de ránézésre a PEP 8 nem tűnik explicitnek erre vonatkozóan (a google python style guide-ja sem egyébként).
Mivel egy változó neve valószínűleg csak egy újabb névkötés a pythonban, véleményem szerint nem igazán számít, hogy azt a nevet a definíciós blokkal, vagy később az =
egyenlőségjellel kötjük valamilyen objektumhoz.
Ezért egyetértek XORcistával abban, hogy a modul szintű “alias” hivatkozásoknak be kellene tartaniuk az osztálynevek szabványát, valószínűleg az AllCaps-t:
class MyClass(object): pass# goodReferenceToClass = MyClass
Amikor azonban paraméter- és változónevekről van szó, állítólag a lowercase_underscores
-nek kellene érvényesülnie, nem? Csak ezzel nem vagyok elégedett, mivel ez a instance vs class reference kétértelműségbe taszít. Fennáll a lehetősége annak, hogy a csupa kisbetűs név arra utal, hogy az objektum példány. Emiatt azt javaslom, hogy a csupa kisbetűs, osztályra hivatkozó változóneveidet utólagos “class” utótaggal egészítsd ki, például így:
class Logger(object): passdef function_expecting_class_reference(logger_class): pass
A példád MyClass
osztályát átneveztem Logger
-re, mert a valós forgatókönyvekben csak kevés osztálynév tartalmazza a "class"
karakterláncot. Ez utóbbi esetben azonban azt javaslom, hogy a kétértelműséget ismét leíró elnevezéssel kerüljük el. Például használhatsz egy classobj
utótagot: