Python类引用的命名约定是什么

Python类引用的命名约定是什么,python,naming-conventions,pep8,Python,Naming Conventions,Pep8,Python中引用类的变量的命名约定是什么 class MyClass(object): pass # which one is correct? reference_to_class = MyClass # or ReferenceToClass = MyClass 下面是另一个与我的情况类似的例子: # cars.py class Car(object): pass class Sedan(Car): pass class Coupe(Car): p

Python中引用类的变量的命名约定是什么

class MyClass(object):
    pass

# which one is correct?
reference_to_class = MyClass

# or
ReferenceToClass = MyClass
下面是另一个与我的情况类似的例子:

# cars.py
class Car(object):
    pass

class Sedan(Car):
    pass

class Coupe(Car):
    pass

class StatonWagon(Car):
    pass

class Van(Car):
    pass

def get_car_class(slug, config):
    return config.get(slug)

# config.py
CONFIG = {
    'ford-mustang': Coupe,
    'buick-riviera': Coupe,
    'chevrolet-caprice': Sedan,
    'chevy-wan' Van:
    'ford-econoline': Van
}

# main.py
from config.py import CONFIG
from cars import get_car_class

MyCarClass = get_car_class('buick-riviera')

my_car = MyCarClass()

我更喜欢ReferenceToClass,因为对代码不熟悉的每个人都知道它是一个类,而不是一个实例。但是,作为一个例子,参考文献将是非常好的。

关于第二个模块:

ReferenceToClass=MyClass


作为函数参数,第一个:


reference\u to\u class=MyClass

我将其视为一个实例变量,PEP8将其定义为使用小写下划线样式。(小写,必要时用下划线分隔单词,以提高可读性。)


tl;dr:对于全局/公共名称,使用
AllCaps
,如XORcist所说:

class Logger:
    pass

AliasLogger = Logger
对于函数参数和函数局部变量,请明确您正在处理具有如下描述性名称的类对象:

def some_func(logger_class):
    pass
class Logger(object):
    pass

def function_expecting_class_reference(logger_class):
    pass
或者类似的东西

def some_func(my_class_classobj):
    pass
当单词
“class”
实际上在您的类名中时。有关
classobj
,另请参见
class\uu
klass


分析/动机(长版)

没有透彻的阅读,但一目了然似乎没有明确说明这一点(谷歌的python风格指南也没有)

因为变量名在python中可能只是另一个变量名,所以在我看来,将该名称与定义块绑定还是稍后使用
=
等号绑定到某个对象并不重要

为此,我同意模块级“别名”引用应遵循您的类命名标准,可能是AllCaps:

class MyClass(object):
    pass

# good
ReferenceToClass = MyClass
然而,当涉及到参数和变量名时,应该使用
小写下划线
,对吗?我只对此不满意,因为这会让您陷入实例与类引用的模糊状态。一个全小写的名称可能试图提示对象是一个实例。因此,我建议将所有小写的类引用变量名和“class”后缀进行后期修复,如下所示:

def some_func(logger_class):
    pass
class Logger(object):
    pass

def function_expecting_class_reference(logger_class):
    pass
我将示例类
MyClass
重命名为
Logger
,因为在实际场景中只有少数类名包含字符串
“class”
。然而,在后一种情况下,我建议再次使用描述性命名来避免歧义。例如,您可以使用
classobj
后缀:

class MyClass(object):
    pass

def function_expecting_class_reference(another_param, my_class_classobj):
    ReferenceToClass = MyClass

我倾向于采用的另一种选择是使用后缀
klass
,比如
my_class\u klass
。并不是每个人都喜欢后者,但无论如何,我还没有测试他们是否会喜欢前者。

有文献参考吗?pep8。类的别名与类的行为完全相同,因此我认为它的命名应该遵循与普通类命名相同的方案。作为函数参数,第一个,主要是因为您无法确定是否会得到类型的描述标准(即类).第二个和第一个的含义取决于问题的文本。在Response.ReferenceToClass中编写显式文本可能是一个好主意,它与MyClass在这里(语义上)完全相同。两者都是引用同一类对象的变量。+1表示后缀。在将变量分配给对象引用时,我经常使用“_ref”后缀来澄清和提高代码可读性。那么
cls
呢?