当前位置: 首页 > 面试题库 >

避免使用Pylint警告E1101:具有动态属性的类的“ ..实例没有..成员”

冯敏达
2023-03-14
问题内容

想象一下一个函数,该函数使用来向对象 动态 添加属性setattr。这样做的原因是我想将一些外部结构(例如给定的参数树)映射到对象:

my_object = SomeClass()
apply_structure(my_object, some_descriptor)
my_object.device1.enabled = True

从技术上讲这是可行的,但是Pylint当然正确地抱怨’device1’不是的成员SomeClass

我可以禁用该警告,但是那会很糟糕(因为在所有情况下由于拼写错误等原因导致该属性不存在时,我仍然希望获得警告)。

是否有一种通用且合法的方式(防印字)将成员动态添加到不会导致警告的对象?

或者:我可以仅对一个 对象 而不对行/块/文件禁用Pylint吗?

说明

您可能想知道为什么以后计划以硬编码方式访问这些属性时,为什么要动态地为对象配备成员属性。

原因是:我有程序的动态部分(在其中进行装饰)和 专门 针对特定 场景 的静态部分。因此,我
可以为这种情况创建一个静态类,但是在许多情况下这太过分了。

以下 专用 代码可能允许访问可能连接到某些总线的设备的某些参数:

class MyDeviceHandler:
   on_get_some_subtree_element(self):
      return _some_internal_value
   on_set_some_subtree_element(self, value):
      _some_internal_value = value

dev = MyDeviceHandler()

decorate_object_with_device_structure(dev, 'some/attached/device')

dev.some.subtree.element = 5       <--- will call the set-callback
x = dev.some.subtree.element       <--- will call the get-callback

因此,后面的结构'some/attached/device'可能是任意的并且非常复杂,我不想在类结构中重现它。

消除此警告的一种方法是创建/访问dict基于树的树:

dev['some']['subtree']['element'] = 5

但这很难写,而且不好看-我只能这样做是为了使Pylint安静下来。


问题答案:

只是为了提供现在对我有用的答案-正如编译器建议的那样,您可以在项目中为有问题的类添加规则.pylintrc

[TYPECHECK]
ignored-classes=Fysom,MyClass


 类似资料:
  • 问题内容: 我们一直是的粉丝。它的静态分析已成为我们所有python项目的重要组成部分,并节省了大量时间来寻找晦涩的bug。但是从1.3-> 1.4升级后,几乎所有已编译的c扩展都会导致E1101(无成员)错误。 以前在1.3之前完美运行的项目现在抱怨E1101几​​乎每个C扩展成员。我们被迫禁用E1101错误,但是,这从实质上不利于的使用。 例如,对包的这种完全有效的使用 通过运行此命令,它将报

  • pylint的输出指出: nltk/nltk/标签/感知机。py:203:[W1202(记录格式插值),Perceptrontager.train]在记录函数中使用%格式,并将%参数作为参数传递 但看看代码https://github.com/nltk/nltk/blob/develop/nltk/tag/perceptron.py#L203,没有使用任何字符串格式: 我是否遗漏了什么或误解了W1

  • 我的应用程序是一个Spring MVC项目 下面是完整的属性文件

  • 我想知道是否有什么方法可以使属性值动态。类似于这样: 感谢您的反馈。在我的例子中,属性值是系统特定的,应该在测试运行时生成。

  • 问题内容: 使用createQuery()。list之后是否可以避免投射警告? 我希望找到一种通过通用参数或方法参数指定目标对象的方法,如下所示: 问题答案: 要记住的最重要的一点是, 警告是由于编译器引起的,而不是hibernate的 -您可以告诉编译器忽略未实现的泛型。通过使用HQL,我们以一种类型安全的方式查询数据,不幸的是,java无法进行验证。 有很多方法可以避开hibernate转换的

  • 我有一个问题与我的道具editToWork: app.js:42491[Vue warn]:避免直接修改道具,因为每当父组件重新渲染时,该值将被覆盖。相反,使用基于道具值的数据或计算属性。道具正在变异:“任务编辑” 组件TaskComponent.vue 组件EditTaskComponent: