描述符的命名约定

war*_*iuc 10 python coding-style naming-conventions

我有一个描述符

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

    def __get__(self, obj, objtype):
        ...
Run Code Online (Sandbox Code Playgroud)

我用它作装饰:

class MyClass():

    @ReferredItem
    some_method(self):
        ...
Run Code Online (Sandbox Code Playgroud)

我见过装饰器是小写的.但是应该用驼峰的方式命名类.

我应该把这个名字命名为referred_item?或者保持现状?

Fre*_*Foo 12

PEP8表示

几乎无一例外,类名使用CapWords约定.

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

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


Fer*_*yer 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
Run Code Online (Sandbox Code Playgroud)