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

新手上路,请多包涵

在 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,每个刚接触代码的人都知道它是一个类而不是一个实例。但正如 poplitea 所写,参考文献会很棒。

原文由 Peter Hudec 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 404
2 个回答

在模块级别第二个:

ReferenceToClass = MyClass

作为函数参数,第一个:

reference_to_class = MyClass

原文由 XORcist 发布,翻译遵循 CC BY-SA 3.0 许可协议

tl;dr :对于全局/公共名称,使用 AllCaps 就像 XORcist 说的

 class Logger:
    pass

AliasLogger = Logger

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

 def some_func(logger_class):
    pass

或沿线的东西

def some_func(my_class_classobj):
    pass

当单词 "class" 实际上在你的类名中时。对于 classobj ,另请参阅 class_klass


分析/动机(长版)

没有彻底阅读,但乍一看 PEP 8 似乎并没有明确说明这一点(谷歌的 python 风格指南也没有)。

由于变量名可能只是 yet-another name binding in python,在我看来,将该名称与定义块绑定还是稍后与 = 等号绑定到某个对象并不重要。

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

 class MyClass(object):
    pass

# good
ReferenceToClass = MyClass

但是,当涉及到参数和变量名称时,据说 lowercase_underscores 应该适用,对吧?我对此不满意,因为它会将您推向实例与类引用的歧义。全小写的名称可能会试图暗示该对象是一个实例。就此而言,我建议在全小写的类引用变量名后加上“类”后缀,如下所示:

 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_klass 。似乎不是每个人都得到后者,但无论如何我还没有测试他们是否会让前者变得更好。

原文由 n611x007 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题