函数实例的命名约定 类

Naming convention for functions instancing classes

我已经使用函数作为工厂实现了一个简单版本的工厂模式。这些函数自然 return class 个实例。

此类函数的正确命名约定是什么 returning class 实例?

class ExampleClass0:
    pass

class ExampleClass1:
    pass

class ExampleClassDefault:
    pass

def ExampleClass(param):
    if param == 0:
       return ExampleClass0()
    elif param == 1:
       return ExampleClass1()
    else
       return ExampleClassDefault()

object0 = ExampleClass(0)
object1 = ExampleClass(1)
object2 = ExampleClass(2)

根据 PEP8,ExampleClass 应该命名为 example_class,但对我来说,如果它被命名为 class 就更清楚了,因为在最后当天它充当 class.

对我来说,当我第一次遇到 python 时,我试图找出代码约定的最佳实践,我真的很喜欢这个 [Google style guide][1],它非常有用。在接下来的 table (img) 你会发现一些推荐:

Guidelines derived from Guido’s Recommendations

我相信在这种情况下,背离 PEP 8 是非常合理的。这种做法不是很常见,但有使用它的例子。例如,摘录自 Django Coding style:

Use InitialCaps for class names (or for factory functions that return classes).

示例来自 django sources

class DeserializationError(Exception):
    """Something bad happened during deserialization."""

    @classmethod
    def WithData(cls, original_exc, model, fk, field_value):
        """
        Factory method for creating a deserialization error which has a more
        explanatory message.
        """
        return cls("%s: (%s:pk=%s) field_value was '%s'" % (original_exc, model, fk, field_value))