【问题标题】:VSCode PyLint Not detecting my Python DTO Class MembersVSCode PyLint 未检测到我的 Python DTO 类成员
【发布时间】: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,我应该改写问题,谢谢

标签: python python-3.x visual-studio-code pylint python-class


【解决方案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_modelobj.product_model = new_value

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 2019-05-30
    • 1970-01-01
    相关资源
    最近更新 更多