[Python][Flask] PyLint 实例属性过多,该资源是否正确编写?

Seb*_*aan 3 python pylint flask-restful

我正在使用 Flask 用 Python 编写一个应用程序,现在在为端点创建资源类期间,我收到 Pylint“实例属性过多”警告。现在我不再知道我正在做的是否是编写资源的“正确”方式。

我将依赖项注入到资源中,如下所示:

api.add_resource(TicketsQuery, '/tickets/query',
             '/ticket/query/<int:ticketID>',
             resource_class_kwargs={'cleaner': Cleaner(StrategyResponseTickets()),
                                    'machine_cleaner': Cleaner(StrategyResponseMachines()),
                                    'db': soap_caller,
                                    'cache': cache,
                                    'field_map': app.config['FIELD_FILTER_MAP']['TICKETS'],
                                    'endpoint_permission': TicketsQueryPermission
                                    })
Run Code Online (Sandbox Code Playgroud)

然后它作为 kwargs 参数显示在资源中。我还装饰了 init 内部的函数,因为我需要类中的变量(来进行装饰本身)。

class TicketsQuery(Resource):
def __init__(self, **kwargs):
    # Dependencies
    self.cleaner = kwargs['cleaner']
    self.machine_cleaner = kwargs['machine_cleaner']
    self.db = kwargs['db']
    self.cache = kwargs['cache']
    self.field_map = kwargs['field_map']
    self.endpoint_permission = kwargs['endpoint_permission']

    # Permissions of endpoint method calls, implemented using wrapper
    self.get = authorization_required(self.endpoint_permission, UserType.GENERIC_EMPLOYEE)(self.get)
    self.post = authorization_required(self.endpoint_permission, UserType.GENERIC_EMPLOYEE)(self.post)

def get(self, permission_set: TicketsPermissionSet, ticketID=-1):
Run Code Online (Sandbox Code Playgroud)

这是在 Flask 中编写资源的正确方法吗?或者有更好的结构可以遵循吗?任何见解或提示表示赞赏!

Ske*_*nvy 5

不要因 linter 警告而灰心 ~ 它是为了提醒您坚持特定的样式。如果项目的根文件夹中还没有 ,.pylintrc则 linter 将使用默认规则;这只是一个针对“实例中变量太多”的风格警告〜即太多self.*-它100%是 pylint 的东西,与 Flask 无关

您可以抑制对此的警告,但通过在类# pylint: disable=too-many-instance-attributesdef __init__(...):.

如果您想要一种更pylintesque 的方法来解决它,请在项目的根文件夹中运行pylint --generate-rcfile(假设您已经pip install pylint并且这些消息不仅仅来自 IDE)以生成.pylintrc.

从那里您可以将错误的代码添加R0902disable=列表中〜即disable=R0902,或者disable=A*,B*,R0902〜如果您禁用多个警告(接受通配符,因此您可以禁用所有 R*消息,但最好仅在您确定知道时才这样做您要关闭哪些警告)。或者max-attributes=,您可以找到下面的行[DESIGN]并将该数字设置为您认为更合理的更高值。

作为参考,如果您想进一步探索,可以找到此信息的资源〜这里是您可以从 pylint 获得的警告列表,您可以通过错误名称too-many-instance-attributes或其代码进行搜索R0902这里是一个示例 pylintrc,您主要可以通过代码浏览,即R0902查找其中影响该警告的属性。

最后,如果您想要更多示例,这是关于同一 pylint 错误消息的另一篇 SO 文章 ~如何处理 Pylint 的“too-many-instance-attributes”消息?