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 中编写资源的正确方法吗?或者有更好的结构可以遵循吗?任何见解或提示表示赞赏!
不要因 linter 警告而灰心 ~ 它是为了提醒您坚持特定的样式。如果项目的根文件夹中还没有 ,.pylintrc则 linter 将使用默认规则;这只是一个针对“实例中变量太多”的风格警告〜即太多self.*-它100%是 pylint 的东西,与 Flask 无关。
您可以抑制对此的警告,但通过在类# pylint: disable=too-many-instance-attributes的def __init__(...):.
如果您想要一种更pylintesque 的方法来解决它,请在项目的根文件夹中运行pylint --generate-rcfile(假设您已经pip install pylint并且这些消息不仅仅来自 IDE)以生成.pylintrc.
从那里您可以将错误的代码添加R0902到disable=列表中〜即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”消息?。