VSCode PyLint 未检测到我的 Python DTO 类成员
Posted
技术标签:
【中文标题】VSCode PyLint 未检测到我的 Python DTO 类成员【英文标题】:VSCode PyLint Not detecting my Python DTO Class Members 【发布时间】:2021-06-18 03:33:03 【问题描述】:Python Lint 不会检测到不正确的类成员。它继续运行我的代码,我在下面有 productName 成员,而不是 productNameTest。它应该发送一个错误。如何解决?目前正在使用 VS Code。
产品型号:
@dataclass(init=False)
class ProductModel:
productId: int
productName: str
产品服务:
class ProductService:
def __init__(self, productModel: ProductModel):
self.productModel= productModel
def getProductModel(self, curveData):
self.productModel.productNameTest = "ABCD" # productNameTest is not a member and should be giving error
【问题讨论】:
"# productNameTest 不是成员,应该给出错误" 你为什么相信?默认情况下,用户定义的 Python 对象可以添加任意属性。 @juanpa.arrivillaga 是否将其限制为一组已定义的成员? 你可以使用__slots__
好的。您发布的代码毫无意义。 Python 不是 Java。不要假设语言的工作方式相同。例如,为什么您希望productModel
可以在任何地方定义? 它不是。请阅读有关 Python 类定义的教程,而不是随意提问:官方 tutorial 将是一个很好的起点。
我知道任何属性都是允许的,我猜我的 pylint 没有显示错误,可能是 cc @juanpa.arrivillaga,我应该改写问题,谢谢
【参考方案1】:
第一个问题很好:)
这看起来像是 pylint 中的假阴性(对数据类的理解不好?),您可以在 pylint's github 中打开错误或拉取请求来修复问题。
顺便说一句,与评论中所说的相反,您的代码是有意义的。唯一的事情是你不必在 python 中做显式的 getter/setter。你可以有公共属性:
class ProductService:
def __init__(self, product_model: ProductModel):
self.product_model= product_model
或私有属性...
class ProductService:
def __init__(self, productModel: ProductModel):
self.__product_model= product_model
@property
def product_model(self):
return self.__product_model
@product_model.setter
def product_model(self, value):
self.__product_model = value
在这两种情况下,调用代码都是obj.product_model
或obj.product_model = new_value
。
【讨论】:
以上是关于VSCode PyLint 未检测到我的 Python DTO 类成员的主要内容,如果未能解决你的问题,请参考以下文章
vscode中PyLint报错Unable to import解决方案