描述符的命名约定

时间:2012-04-18 15:20:22

标签: python coding-style naming-conventions

我有一个描述符

class ReferredItem(): 
    def __init__(self, method):
        self.method = method

    def __get__(self, obj, objtype):
        ...

我用它作装饰:

class MyClass():

    @ReferredItem
    some_method(self):
        ...

我看过装饰器是小写的。但是类应该以camel case命名。

我应该将该课程命名为referred_item吗?或者保持原样?

4 个答案:

答案 0 :(得分:11)

PEP8表示

  

几乎无一例外,类名都使用CapWords惯例。

没有解释异常是什么,但在标准库中,最常用作函数的类通常遵循函数命名约定。例如。 itertools.groupby实际上是一个类,但在正常使用中你没有注意到;它是一个实现细节,groupby可以重写为实际函数。

对于用作装饰器的类,可以使用全小写装饰器命名约定来采用类似的样式:referred_item,而不是ReferredItem

答案 1 :(得分:5)

虽然任何可调用对象都可以用作装饰器,但它们通常被认为是函数,而类函数对象应该遵循“lowercase_with_underscores”约定。

你应该隐藏装饰器是一个类的事实,因为这是一个实现细节。因此,装饰器应遵循“lowercase_with_underscores”样式。这样,如果有一天您决定将装饰器实现为函数,则不必更改用户代码。

就个人而言,我仍然会使用CapWords作为(内部)装饰器类名,并提供一个应该用于装饰器的别名变量:

class _ReferredItem:
    def __init__(self, method):
        self.method = method

    def __get__(self, obj, objtype):
        # ...

referred_item = _ReferredItem

答案 2 :(得分:1)

PEP8在这一点上并不是特别清楚...但是非正式地说,我发现一个好的规则是:如果一个类会像函数一样使用(例如,作为装饰器,还有像上下文管理器这样的东西),它应该有像函数一样的小写名称。这似乎是标准库遵循的惯例。

所以我更愿意看到referred_item而不是ReferredItem

答案 3 :(得分:0)

我通常在课堂上使用CamelCase,然后添加一个别名,我将其用作装饰器。

referred_item = ReferredItem