Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在pylint和mypy中处理Python类重新定义警告_Python_Sqlalchemy_Pylint_Mypy - Fatal编程技术网

在pylint和mypy中处理Python类重新定义警告

在pylint和mypy中处理Python类重新定义警告,python,sqlalchemy,pylint,mypy,Python,Sqlalchemy,Pylint,Mypy,SQLAlchemy backrefs在变得复杂时往往会导致循环导入,因此我想出了一种方法来“重新打开”一个类似Ruby的Python类: def重新打开(cls): """ 将修饰类的内容移动到现有类中并返回该类。 用法:: from.other_模块导入现有类 @重新打开(现有类) 类现有类: @财产 def新_属性(自身): 通过 这相当于: def新_属性(自身): 通过 ExistingClass.new_属性=属性(new_属性) """ def装饰器(临时cls): 对于属性,临时

SQLAlchemy backrefs在变得复杂时往往会导致循环导入,因此我想出了一种方法来“重新打开”一个类似Ruby的Python类:

def重新打开(cls):
"""
将修饰类的内容移动到现有类中并返回该类。
用法::
from.other_模块导入现有类
@重新打开(现有类)
类现有类:
@财产
def新_属性(自身):
通过
这相当于:
def新_属性(自身):
通过
ExistingClass.new_属性=属性(new_属性)
"""
def装饰器(临时cls):
对于属性,临时目录项()中的值:
#跳过标准Python属性,处理其余的
如果属性不在(“目录”、“文档”、“模块”、“weakref”):
设置属性(cls、属性、值)
返回cls
返回装饰器
这是一个简化版本;和测试

如果SQLAlchemy现有的relationship+backref机制不足以插入双向SQLAlchemy关系和助手方法,那么这段代码可以很好地工作

然而:

  • mypy引发错误“名称'ExistingClass'已定义(可能由导入定义)”
  • pylint引发E0102“类已定义”
  • 我可以通过在行上添加注释来忽略这两个错误(
    #type:ignore
    #skipcq
    ),但过度使用这些注释会让bug溜走。告诉mypy和pylint这种用法是可以的


    我该怎么做?

    这能回答您的问题吗?我宁愿不做一个毯子禁用,因为它会减少捕捉实际bug的实用程序。内联每实例禁用是我当前的解决方案,但感觉就像我在训练自己忽略所有错误和警告。如果键入,则可以导入仅用于
    中类型批注的类。键入检查:
    阻止循环导入。循环导入问题来自SQLAlchemy关系,不是打字检查。这能回答你的问题吗?我宁愿不做一个毯子禁用,因为它会减少捕捉实际bug的实用程序。内联每实例禁用是我当前的解决方案,但感觉就像我在训练自己忽略所有错误和警告。如果键入,则可以导入仅用于
    中类型批注的类。键入检查:
    阻止循环导入。循环导入问题来自SQLAlchemy关系,不是类型检查。